W3docs

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
ParameterBeschreibung
$haystackDer String, in dem gesucht wird.
$needleDer zu zählende Teilstring. Er muss mindestens ein Zeichen lang sein; ein leerer $needle wirft einen ValueError.
$offsetOptional. Die Position in $haystack, an der die Suche beginnt. Ein negativer Offset zählt vom Ende des Strings rückwärts.
$lengthOptional. 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

php— editable, runs on the server

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"; // 1

Beim 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 $offset und $length die Suche über das Ende des Strings hinausschieben würden, wirft PHP einen ValueError. Stelle sicher, dass $offset + $length innerhalb von strlen($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 2

In "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"; // 3

Den 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.

Übungen

Übung
Was ist der Zweck der Funktion substr_count() in PHP?
Was ist der Zweck der Funktion substr_count() in PHP?
Was this page helpful?