Das erste/letzte Zeichen eines Strings ermitteln (Thema: PHP Beispiele)

Wie in PHP das erste oder letzte Zeichen eines Strings bestimmt werden kann

1. Direkter Zugriff auf den Index des Zeichens

Will man das erste oder letzte Zeichen eines Strings auslesen, dann ist es der einfachste Weg, auf diesen zuzugreifen als wäre er ein Array. Die Schreibweise lautet dann $string[index], wobei „index” ein Integer-Wert zwischen 0 und n ist (n entspricht der String-Länge). Entsprechend gibt $string[0] das erste Zeichen des Strings zurück. Das letzte Zeichen hat den Index Länge($string) - 1. Die Länge des Strings kann mit der Funktion strlen($string) bestimmt werden. Dass 1 subtrahiert werden muss kann leicht anhand eines Strings mit nur einem Zeichen hergeleitet werden. In diesem hat das einzige Zeichen den Index 0 (da die Indexierung bei 0 beginnt), die Länge ist aber 1. Das nächste Beispiel stellt sowohl den Zugriff auf das erste als auch das letzte Zeichen dar:

PHP-Code
<?php
	$str = 'Dies ist ein Beispielstring.';
	$firstChr = $str[0];
	$lastChr = $str[strlen($str)-1];
	var_dump($firstChr, $lastChr);
?>

HTML-Code: Ausgabe
string(1) "D"
string(1) "."


Vorsichtig muss man aber sein, wenn der String auch leer sein kann. Dann führen beide Abfragen nämlich zu Fehlern:

PHP-Code
<?php
	$str = '';
	$firstChr = $str[0];
	$lastChr = $str[strlen($str)-1];
	var_dump($firstChr, $lastChr);
?>

HTML-Code: Ausgabe
<br />
<b>Notice</b>:  Uninitialized string offset: 0 in <b>...\test.php</b> on line <b>3</b><br />
<br />
<b>Notice</b>:  Uninitialized string offset: -1 in <b>...\test.php</b> on line <b>4</b><br />
string(0) ""
string(0) ""

2. UTF-8 und Index-Zugriff

Der direkte Zugriff per Index ist nicht multibyte-sicher. Bei Zeichen, die aus mehreren Byte bestehen, gibt es daher Probleme. Das betrifft die meisten UTF-8-Zeichen. Hier wird dies am Zeichen „α” dargestellt. Greift man auf dieses per Index zu, dann erhält man nicht „α” zurück, sondern dessen erstes oder letztes Byte.

PHP-Code
<?php
	mb_internal_encoding('UTF-8');
	$str = 'αDies ist ein Beispielstring mit UTF-8α';
	$firstChr = $str[0];
	$lastChr = $str[strlen($str)-1];
	// hier mit htmlentities, um keine speziellen Sonderzeichen zu erhalten, die nur bedingt dargestellt werden koennen
	var_dump(htmlentities($firstChr), htmlentities($lastChr));
?>

HTML-Code: Ausgabe
string(7) "&Icirc;"
string(8) "&plusmn;"


3. UTF-8 und mb_substr()

Um das zuvor genannte Problem zu umgehen und multibyte-sicher das erste oder letzte Zeichen auszulesen, kann mb_substr($str, $start, $length) verwendet werden. Diese Funktion gibt den Abschnitt des Strings $str zurück, der beim Index $start beginnt und beim Index $start+$length endet. Das letzte Zeichen ist nicht einschließlich, $start=x und $length=1 liefert daher exakt das Zeichen mit Index x. Es kann auch ein negativer Wert für $start übergeben werden. Dies wird dann interpretiert als Länge($string) - x für $start=-x. Das nächste Beispiel illustriert die Anwendung von mb_substr():

PHP-Code
<?php
	mb_internal_encoding('UTF-8');
	$str = 'αDies ist ein Beispielstring mit UTF-8α';
	$firstChr = mb_substr($str, 0, 1);
	$lastChr = mb_substr($str, -1, 1);
	var_dump($firstChr, $lastChr);
?>

HTML-Code: Ausgabe
string(2) "α"
string(2) "α"


Ein Vorteil von mb_substr() ist die erhöhte Flexibilität. Indem $length erhöht wird, können mit Leichtigkeit auch mehrere Zeichen ausgelesen werden — statt nur das erste/letzte.

PHP-Code
<?php
	mb_internal_encoding('UTF-8');
	$str = 'αDies ist ein Beispielstring mit UTF-8α';
	$firstChars = mb_substr($str, 0, 4);
	$lastChars = mb_substr($str, -4, 4);
	var_dump($firstChars, $lastChars);
?>

HTML-Code: Ausgabe
string(5) "αDie"
string(5) "F-8α"


4. Eigene Funktionen für die ersten/letzten n Zeichen

Im nächsten Beispiel werden zwei Funktionen definiert, welche die ersten (getFirstChars()) oder letzten (getLastChars()) n Zeichen zurückgeben. Die Implementierung ist trivial, da die Parameter der beiden Funktionen nur richtig an mb_substr() weitergegeben werden müssen. Der Wert der Funktionen ergibt sich daher in erster Linie aus der klareren Benennung.

PHP-Code
<?php
	mb_internal_encoding('UTF-8');

	function getFirstChars($str, $length) {
		return mb_substr($str, 0, $length);
	}

	function getLastChars($str, $length) {
		return mb_substr($str, -$length, $length);
	}

	$str1 = 'αDies ist ein Beispielstring mit UTF-8α';
	var_dump(getFirstChars($str1, 4), getLastChars($str1, 4)); // "αDie" und "F-8α"

	$str2 = '12345';
	var_dump(getFirstChars($str2, 4), getLastChars($str2, 4)); // "1234" und "2345"

	$str3 = '';
	var_dump(getFirstChars($str3, 4), getLastChars($str3, 4)); // "" und "" (da $str3 leer ist)

	$str4 = 'test';
	var_dump(getFirstChars($str4, 0), getLastChars($str4, 0)); // "" und "" (da jeweils length=0)
?>

HTML-Code: Ausgabe
string(5) "αDie"
string(5) "F-8α"
string(4) "1234"
string(4) "2345"
string(0) ""
string(0) ""
string(0) ""
string(0) ""


Kommentare (0)

Von neu nach alt