substr_count()
Die Funktion substr_count() in PHP zählt, wie oft ein Teilstring in einem anderen String vorkommt – nützlich für Validierung und Textanalyse.
Einführung
Die Funktion substr_count() in PHP zählt, wie oft ein Teilstring in einem größeren String vorkommt. Sie gibt eine einfache Ganzzahl zurück, was sie praktisch für Aufgaben wie das Messen, wie oft ein Wort in einem Text auftaucht, das Zählen von Trennzeichen vor dem Parsen eines Wertes oder die Überprüfung, ob eine Eingabe die erwartete Anzahl an Trennzeichen enthält, macht.
Dieses Kapitel behandelt die Syntax der Funktion, wie die optionalen Argumente $offset und $length die Suche einschränken, die zwei Verhaltensweisen, über die man am häufigsten stolpert (überlappende Treffer und Groß-/Kleinschreibung), sowie die praktischen Situationen, in denen man auf sie zurückgreift.
Syntax
substr_count(string $haystack, string $needle, int $offset = 0, ?int $length = null): int| Parameter | Beschreibung |
|---|---|
$haystack | Der String, in dem gesucht wird. |
$needle | Der zu zählende Teilstring. Er muss mindestens ein Zeichen lang sein; ein leerer $needle wirft einen ValueError. |
$offset | Optional. Die Position in $haystack, an der die Suche beginnt. Ein negativer Offset zählt vom Ende des Strings rückwärts. |
$length | Optional. Die maximale Anzahl der zu durchsuchenden Zeichen, beginnend bei $offset. Wenn weggelassen (oder null), läuft die Suche bis zum Ende des Strings. |
Die Funktion gibt die Anzahl der Vorkommen von $needle als int zurück.
Einfaches Beispiel
Hier kommt "is" zweimal vor — einmal in "This" und einmal im eigenständigen Wort "is" — daher gibt die Funktion 2 zurück.
Suche mit $offset und $length einschränken
Das Argument $offset gibt an, wo substr_count() beginnen soll, und $length begrenzt, wie weit gesucht wird. Dies ist nützlich, wenn nur ein Teil eines Strings relevant ist, etwa ein Header-Abschnitt oder ein Feld fester Breite.
<?php
$text = "hello world hello";
// Start searching after the first word.
echo substr_count($text, "hello", 6), "\n"; // 1
// Search only the first 5 characters, starting at index 1.
echo substr_count("abcabcabc", "abc", 1, 5), "\n"; // 1Beim ersten Aufruf beginnt die Suche bei Index 6, sodass nur das zweite "hello" gezählt wird. Beim zweiten Aufruf ist der Suchbereich "bcabc" (5 Zeichen ab Index 1), der ein einziges vollständiges "abc" enthält.
Wenn
$offsetund$lengthdie Suche über das Ende des Strings hinausschieben würden, wirft PHP einenValueError. Stelle sicher, dass$offset + $lengthinnerhalb vonstrlen($haystack)bleibt.
Achtung: Überlappende Treffer werden nicht gezählt
substr_count() zählt keine überlappenden Vorkommen. Nachdem ein Treffer gefunden wurde, setzt die Suche am Ende dieses Treffers fort, nicht beim nächsten Zeichen.
<?php
echo substr_count("aaa", "aa"); // 1, not 2In "aaa" gibt es zwei überlappende "aa"-Paare, aber die Funktion zählt nur das erste und setzt danach fort. Wenn überlappende Treffer benötigt werden, verwende einen regulären Ausdruck mit einem Lookahead via preg_match_all().
Achtung: Die Suche ist Groß-/Kleinschreibungssensitiv
substr_count() sucht exakt, daher sind "Apple" und "apple" unterschiedliche Teilstrings.
<?php
$text = "Apple apple APPLE";
echo substr_count($text, "apple"), "\n"; // 1
// Normalize the case first for a case-insensitive count.
echo substr_count(strtolower($text), "apple"), "\n"; // 3Den Haystack mit strtolower() in Kleinbuchstaben umzuwandeln ist die einfachste Methode, den Vergleich Groß-/Kleinschreibungsunabhängig zu machen.
Wann substr_count() verwenden?
- Trennzeichen zählen — zum Beispiel prüfen, wie viele Kommas eine CSV-Zeile enthält, bevor sie mit
explode()aufgeteilt wird. - Wort- oder Token-Häufigkeit — messen, wie oft ein Begriff in einem Textblock vorkommt.
- Einfache Validierung — sicherstellen, dass ein Wert die erwartete Anzahl an Trennzeichen enthält (z. B. genau zwei Punkte in einem Versionsstring).
Wenn die Position eines Treffers statt einer Anzahl benötigt wird, verwende strpos(); um einen Teil eines Strings zu extrahieren, verwende substr().
Fazit
substr_count() ist eine schnelle, einfache Möglichkeit, Vorkommen eines Teilstrings zu zählen und als Ganzzahl zurückzugeben. Die beiden wichtigsten Verhaltensweisen — überlappende Treffer werden übersprungen und die Suche ist Groß-/Kleinschreibungssensitiv — sollte man im Gedächtnis behalten. Mit den Argumenten $offset/$length lässt sich die Suche auf einen bestimmten Teil des Strings einschränken.