Funktion strrchr() - Suchen des letzten Vorkommens eines Zeichens

Zeichenketten müssen häufig auf Vorkommen von Teil-Strings untersucht werden. Wenn beispielsweise die Produktnummern einer Kategorie mit bestimmten Zeichen beginnen oder enden, könnte man die Zeichenkette danach suchen und davon abhängig einen Teil der Zeichenkette weiterverarbeiten. Falls man nach dem ersten Vorkommen eines Teil-Strings sucht, kann man die Funktion strstr() verwenden. Es gibt auch die Möglichkeit, nach dem letzten Vorkommen eines Teil-Strings suchen zu lassen. Hierfür kann die Funktion strrchr() verwendet werden. Innerhalb der runden Klammern werden die folgenden Parameter angegeben.

  1. Die Zeichenkette, in der nach dem Teil-String gesucht werden soll (haystack).
  2. Der Teil-String, nach dem in der Zeichenkette gesucht werden soll (needle).

Beim folgenden Beispielcode enthält die Zeichenkette zwei Punkte. Mit strrchr() wird das letzte Vorkommen eines Punktes gesucht. Der Rückgabewert ist daher .xyz.

<?php

$str = 'email.adresse@provider.xyz';
$needle = '.';

// Ausgabe .xyz
echo strrchr($str, $needle);

?>

Die Funktion strrchr() unterscheidet sich außerdem dahingehend von strstr(), dass falls man mehrere Zeichen als gesuchten Teil-String angibt, für die Suche nur das erste Zeichen herangezogen wird. Bei strstr() wird dagegen nach der gesamten Zeichenfolge gesucht. Beim folgenden Beispiel wird nach der Zeichenfolge @ABC gesucht. Obwohl die übrigen Zeichen nach dem Zeichen @ nicht übereinstimmen, ist der Rückgabewert @provider.xyz, da nur das erste Zeichen des Teil-Strings gesucht wird.

<?php

$str = 'email.adresse@provider.xyz';
$needle = '@ABC';

// Ausgabe @provider.xyz
echo strrchr($str, $needle);

?>

Der Rückgabewert der Funktion strrchr() ist das gesuchte Zeichen sowie der Rest der Zeichenkette (Typ string). Falls das gesuchte Zeichen nicht gefunden wird, ist der Rückgabewert FALSE (Typ bool). Falls man nach dem Zeichen 0 suchen lässt und das Zeichen als letztes in der Zeichenkette vorkommt, kann es bei einer evtl. anschließenden if-, else-Abfrage mit dem Vergleichsoperator == auf FALSE zu einer Unstimmigkeit kommen. Dann wird nämlich der Rückgabewert 0 (Typ string) als FALSE (Typ bool) ausgewertet. Das kann verhindert werden, indem man als Vergleichsoperator === (oder !==) verwendet, womit auch eine Prüfung des Datentyps vorgenommen wird.

<?php

$str = '9876543210';
$needle = '0';

// Rückgabewert in $a speichern
$a = strrchr($str, $needle);

if ($a === FALSE)
{
  echo 'Zeichen nicht gefunden';
}
else
{
  echo 'Zeichen gefunden';
}

?>

Die Funktion strrchr() ist case-sensitive. Es wird somit zwischen Groß- und Kleinschreibung unterschieden. Beim folgenden Beispiel ist der Rückgabewert abcABC, da das Zeichen a (als letztes Vorkommen) bereits zu Beginn gefunden wird.

<?php

$str = 'abcABC';
$needle = 'a';

// Ausgabe abcABC
echo strrchr($str, $needle);

?>

Bei der Verwendung der Funktion strrchr() in Verbindung mit der Zeichenkodierung UTF-8 kann es bei sogenannten Multibyte-Zeichen wie den Umlauten zu falschen Rückgabewerten kommen. Beim folgenden Beispiel wird nach dem Zeichen ä gesucht und es müsste die gesamte Zeichenkette zurückgegeben werden. Es wird jedoch das letzte Zeichen ß zurückgegeben.

<?php

$str = 'äöüÄÖÜß';
$needle = 'ä';

// Ausgabe ß
echo strrchr($str, $needle);

?>

In solchen Fällen kann man statt strrchr() die Multibyte-Funktion mb_strrchr() verwenden. Damit ist es möglich, auch die Zeichenkodierung als Parameter anzugeben. Ansonsten funktioniert sie wie strrchr().