Start · Sprachen · PHP · Referenz · strrchr

strrchr

Funktion

Gibt den Teil eines Strings zurück, der beim letzten Vorkommen von <code>$needle</code> beginnt und bis zum Ende des Strings reicht.

seit PHP 4.0.0 Kategorie: string

Signatur

strrchr(string $haystack, string $needle): string|false

Beschreibung

strrchr() durchsucht den String $haystack von rechts nach dem letzten Vorkommen von $needle und gibt den Teilstring ab diesem Zeichen (einschließlich des Zeichens selbst) bis zum Ende des Strings zurück. Wird das gesuchte Zeichen nicht gefunden, gibt die Funktion false zurück.

Typische Anwendungsfälle sind das Extrahieren von Dateiendungen aus Pfadangaben, das Isolieren des letzten Pfadsegments oder das Verarbeiten von durch Trennzeichen gegliederten Zeichenketten, wenn nur der letzte Teil benötigt wird.

Wenn $needle mehr als ein Zeichen enthält, wird seit PHP 8.3 eine Deprecation-Warnung ausgegeben – in früheren Versionen wurde nur das erste Zeichen von $needle verwendet. Ab PHP 9.0 soll dieses Verhalten geändert werden. Für mehrdimensionale Suchen empfiehlt sich stattdessen strrpos() in Kombination mit substr().

Die Funktion ist case-sensitiv. Für eine Suche ohne Berücksichtigung der Groß-/Kleinschreibung gibt es keine direkte Alternative – hier kann man den Haystack mit strtolower() umwandeln und anschließend strrchr() anwenden.

Parameter

Name Typ Default Beschreibung
$haystack Pflicht string Der Eingabe-String, in dem gesucht wird.
$needle Pflicht string Das gesuchte Zeichen (oder ab PHP 8.3 offiziell nur ein einzelnes Zeichen). Bei mehreren Zeichen wird nur das erste verwendet; ab PHP 8.3 wird dafür eine Deprecation-Warnung ausgegeben.

Rückgabewert

Typ
string|false
Beschreibung
Gibt den Teilstring zurück, der beim letzten Vorkommen von $needle beginnt und bis zum Stringende reicht. Wird $needle nicht gefunden, wird false zurückgegeben.

Beispiele

Dateiendung aus einem Pfad extrahieren

<?php
$pfad = '/var/www/html/index.html';

// Gibt '.html' zurück (inklusive Punkt)
$endung = strrchr($pfad, '.');
echo $endung; // .html

// Nur die Endung ohne Punkt:
echo ltrim($endung, '.'); // html
.html html

Letztes Verzeichnis aus einem Dateipfad ermitteln

<?php
$pfad = '/var/www/html/projekt/index.php';

// Letztes Segment nach dem letzten '/'
$segment = strrchr($pfad, '/');
// $segment ist '/index.php'

// Ohne führenden Slash:
$dateiname = substr($segment, 1);
echo $dateiname; // index.php

// Verzeichnis bestimmen:
$verzeichnis = substr($pfad, 0, strrpos($pfad, '/'));
echo $verzeichnis; // /var/www/html/projekt
index.php /var/www/html/projekt

Rückgabewert false prüfen

<?php
$text = 'Hallo Welt';

$ergebnis = strrchr($text, 'X');

if ($ergebnis === false) {
    echo "Zeichen nicht gefunden.";
} else {
    echo $ergebnis;
}
Zeichen nicht gefunden.

// Wichtig · Fallstricke

Achtung ab PHP 8.3: Wenn $needle mehr als ein Zeichen enthält, wird eine Deprecation-Warnung (E_DEPRECATED) ausgegeben. Passen Sie bestehenden Code an, sodass $needle immer genau ein Zeichen ist, oder verwenden Sie strrpos() zusammen mit substr() für mehrteilige Suchen.

Der Vergleich ist case-sensitiv. strrchr($str, 'A') findet kein kleines a.

Da die Funktion false zurückgeben kann, sollte der Rückgabewert immer mit === false geprüft werden, da ein leerer String oder "0" im falschen Vergleich (== false) ebenfalls als falsy gilt.