substr_count()
La funzione substr_count() in PHP conta le occorrenze di una sottostringa all'interno di una stringa. Utile per analisi di testo e validazione.
Introduzione
La funzione substr_count() in PHP conta quante volte una sottostringa appare all'interno di una stringa più grande. Restituisce un numero intero, il che la rende utile per operazioni come misurare quante volte una parola compare in un testo, contare i delimitatori prima di decidere come analizzare un valore, o verificare che un input contenga il numero atteso di separatori.
Questo capitolo tratta la sintassi della funzione, come gli argomenti opzionali $offset e $length restringono la ricerca, i due comportamenti che creano più confusione (corrispondenze sovrapposte e distinzione tra maiuscole e minuscole) e i casi pratici in cui è opportuno utilizzarla.
Sintassi
substr_count(string $haystack, string $needle, int $offset = 0, ?int $length = null): int| Parametro | Descrizione |
|---|---|
$haystack | La stringa in cui cercare. |
$needle | La sottostringa da contare. Deve essere lunga almeno un carattere; una $needle vuota genera un ValueError. |
$offset | Opzionale. La posizione in $haystack da cui inizia la ricerca. Un offset negativo conta a partire dalla fine della stringa. |
$length | Opzionale. Il numero massimo di caratteri da ricercare, a partire da $offset. Se omesso (o null), la ricerca prosegue fino alla fine della stringa. |
La funzione restituisce il numero di occorrenze di $needle come int.
Esempio di base
Qui "is" appare due volte — una in "This" e una nella parola autonoma "is" — quindi la funzione restituisce 2.
Limitare la ricerca con $offset e $length
L'argomento $offset indica a substr_count() da dove iniziare, mentre $length limita fino a dove cercare. Questo è utile quando si è interessati solo a una parte della stringa, come una sezione di intestazione o un campo a larghezza fissa.
<?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"; // 1Nella prima chiamata la ricerca inizia all'indice 6, quindi viene contato solo il secondo "hello". Nella seconda chiamata la finestra è "bcabc" (5 caratteri a partire dall'indice 1), che contiene un singolo "abc" completo.
Se
$offsete$lengthspingerebbero la ricerca oltre la fine della stringa, PHP genera unValueError. Mantenere$offset + $lengthall'interno distrlen($haystack).
Attenzione: le corrispondenze sovrapposte non vengono conteggiate
substr_count() non conta le occorrenze sovrapposte. Dopo aver trovato una corrispondenza, continua dall'estremità di quella corrispondenza, non dal carattere successivo.
<?php
echo substr_count("aaa", "aa"); // 1, not 2In "aaa" ci sono due coppie "aa" sovrapposte, ma la funzione conta solo la prima e poi riprende dopo di essa. Se si hanno bisogno di corrispondenze sovrapposte, usare un'espressione regolare con un lookahead tramite preg_match_all().
Attenzione: la ricerca distingue tra maiuscole e minuscole
substr_count() effettua corrispondenze esatte, quindi "Apple" e "apple" sono sottostringhe diverse.
<?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"; // 3Convertire la stringa haystack in minuscolo con strtolower() prima di contare è il modo più semplice per rendere il confronto indipendente dalla distinzione tra maiuscole e minuscole.
Quando usare substr_count()
- Contare delimitatori — ad esempio, verificare quante virgole ha una riga CSV prima di dividerla con
explode(). - Frequenza di parole o token — misurare quante volte un termine compare in un blocco di testo.
- Validazione leggera — confermare che un valore contenga il numero atteso di separatori (es. esattamente due punti in una stringa di versione).
Quando si ha bisogno della posizione di una corrispondenza anziché di un conteggio, usare strpos(); quando si vuole estrarre una parte di una stringa, usare substr().
Conclusione
substr_count() è un modo veloce e semplice per contare le occorrenze di sottostringhe e restituirle come numero intero. Ricordare i suoi due comportamenti chiave — salta le corrispondenze sovrapposte ed è sensibile alle maiuscole e minuscole — e usare gli argomenti $offset/$length per limitare la ricerca quando si ha bisogno di ispezionare solo una parte di una stringa.