Start · Sprachen · PHP · Referenz · strchr

strchr

Funktion

Alias von <code>strstr()</code> — sucht das erste Vorkommen eines Teilstrings und gibt den Rest des Strings ab dieser Stelle zurück.

seit PHP 4.0.0 Kategorie: string

Signatur

strchr(string $haystack, string|int $needle, bool $before_needle = false): string|false

Beschreibung

strchr() ist ein vollständiger Alias der Funktion strstr() und verhält sich in allen Aspekten identisch zu ihr. Die Funktion durchsucht den String $haystack nach dem ersten Vorkommen von $needle und gibt den Teil des Strings ab diesem Vorkommen (inklusive des Suchstrings selbst) zurück.

Wird der optionale Parameter $before_needle auf true gesetzt, gibt die Funktion stattdessen den Teil des Strings vor dem ersten Vorkommen des Suchstrings zurück. Wird $needle als Integer übergeben, wird er als ASCII-Zeichenwert interpretiert — dieses Verhalten stammt aus C-Implementierungen und ist in modernem PHP-Code zu vermeiden.

Die Funktion ist case-sensitiv. Für eine Suche ohne Berücksichtigung der Groß-/Kleinschreibung steht stristr() zur Verfügung. Da strchr() lediglich ein Alias ist, empfiehlt es sich für neuen Code, direkt strstr() zu verwenden, um die Lesbarkeit zu verbessern.

Typische Anwendungsfälle sind das Extrahieren von Dateiendungen, Domänen aus E-Mail-Adressen oder beliebigen Teilstrings nach einem Trennzeichen.

Parameter

Name Typ Default Beschreibung
$haystack Pflicht string Der Eingabe-String, in dem gesucht wird.
$needle Pflicht string|int Der gesuchte Teilstring. Wird ein Integer übergeben, wird er als ASCII-Zeichenwert interpretiert (veraltet; besser einen String übergeben).
$before_needle bool false Wenn true, wird der Teil des Strings vor dem ersten Vorkommen von $needle zurückgegeben.

Rückgabewert

Typ
string|false
Beschreibung
Gibt den Teilstring ab (oder vor) dem ersten Vorkommen von $needle zurück. Wird $needle nicht gefunden, wird false zurückgegeben.

Beispiele

Domain aus einer E-Mail-Adresse extrahieren

<?php
$email = 'benutzer@example.com';

// Alles ab '@' (inklusive '@') zurückgeben
$domain_mit_at = strchr($email, '@');
echo $domain_mit_at; // @example.com

// Nur den Teil vor '@' zurückgeben
$benutzer = strchr($email, '@', before_needle: true);
echo $benutzer; // benutzer
@example.com benutzer

Dateiendung aus einem Pfad ermitteln

<?php
$dateiname = 'bericht_2024.pdf';

$ergebnis = strchr($dateiname, '.');
if ($ergebnis !== false) {
    echo 'Erweiterung: ' . $ergebnis; // .pdf
} else {
    echo 'Keine Dateiendung gefunden.';
}
Erweiterung: .pdf

Rückgabe false wenn needle nicht gefunden

<?php
$text = 'Hallo Welt';
$ergebnis = strchr($text, '@');

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

// Wichtig · Fallstricke

Hinweis: strchr() ist lediglich ein Alias von strstr(). Es gibt keinen funktionalen Unterschied zwischen beiden. In neuem Code sollte aus Gründen der Konsistenz und Lesbarkeit bevorzugt strstr() verwendet werden.

Achtung bei Typ-Vergleichen: Da die Funktion false zurückgibt, wenn $needle nicht gefunden wird, ist ein strikter Vergleich mit === false notwendig. Ein einfacher if (!$ergebnis)-Check würde auch einen leeren String als nicht gefunden werten.

Die Übergabe eines Integers als $needle zur Interpretation als ASCII-Wert gilt als veraltet und sollte vermieden werden. Nutze stattdessen chr() um den Integer explizit in ein Zeichen umzuwandeln.