OUJOOD.COM
À quoi sert substr_count() ?
Quand vous travaillez sur une chaîne de texte en PHP, il arrive souvent d'avoir besoin de savoir combien de fois un mot ou un fragment précis y apparaît. C'est exactement le rôle de substr_count() : elle parcourt une chaîne et renvoie le nombre d'occurrences d'une sous-chaîne donnée.
Disponible depuis PHP 4, cette fonction accepte deux paramètres obligatoires — la chaîne source et la sous-chaîne à rechercher — et deux paramètres facultatifs pour restreindre la recherche à une portion de la chaîne.
Point important : substr_count() ne compte pas les occurrences qui se chevauchent. Si votre sous-chaîne se répète en se superposant, seule la première sera retenue. L'exemple ci-dessous illustre ce comportement.
Syntaxe
substr_count(chaîne, sous-chaîne, début, longueur)
| Paramètre | Description |
|---|---|
| chaîne | Requis. La chaîne dans laquelle effectuer la recherche. |
| sous-chaîne | Requis. La sous-chaîne à rechercher. |
| début | Facultatif. Position dans la chaîne à partir de laquelle démarrer la recherche (index à partir de 0). |
| longueur | Facultatif. Nombre de caractères à analyser depuis la position de début. Une erreur est générée si début + longueur dépasse la taille totale de la chaîne. |
Exemple complet avec explications
Le script suivant combine strlen() pour mesurer la longueur de la chaîne et substr_count() pour compter les occurrences dans différents contextes : recherche complète, recherche à partir d'une position, recherche sur une plage limitée, et cas d'erreur.
<?php $text = 'Ceci est un test'; // strlen() retourne 16 : la chaîne contient 16 caractères echo strlen($text), "<br />"; // 2 occurrences de 'est' : dans "Ceci est" et dans "test" echo substr_count($text, 'est'), "<br />"; // Recherche à partir du caractère 6 → la chaîne analysée est 'st un test' // Une seule occurrence trouvée echo substr_count($text, 'est', 6), "<br />"; // Recherche à partir de 6, sur 4 caractères → 'st u' // Aucune occurrence trouvée echo substr_count($text, 'est', 6, 4), "<br />"; // Erreur : 8 + 10 = 18 > 16 (longueur totale) // PHP génère un avertissement echo substr_count($text, 'est', 8, 10), "<br />"; // Occurrences qui se chevauchent : 'gcdgcd' apparaît une seule fois // car après la première correspondance, la recherche reprend après la fin du segment trouvé $text2 = 'gcdgcdgcd'; echo substr_count($text2, 'gcdgcd'); ?>
Ce que chaque appel renvoie
strlen($text) retourne 16 — la chaîne 'Ceci est un test' compte 16 caractères espaces compris.
Premier substr_count : deux occurrences de 'est', une dans le mot « est » (position 5) et une dans « test » (position 13).
Deuxième substr_count avec début = 6 : la recherche démarre au 7ème caractère, soit à partir de « st un test ». Une seule occurrence de 'est' est trouvée à la fin.
Troisième substr_count avec début = 6 et longueur = 4 : seuls les caractères 6 à 9 sont analysés, soit « st u ». La sous-chaîne 'est' n'y figure pas.
Quatrième appel — cas d'erreur : position 8 + longueur 10 = 18, ce qui dépasse la longueur totale de 16 caractères. PHP émet un avertissement.
Dernier appel — chevauchement : dans 'gcdgcdgcd', la sous-chaîne 'gcdgcd' commence à la position 0. Une fois cette occurrence trouvée, la recherche repart depuis la position 6. Il ne reste que 'gcd', insuffisant pour une deuxième correspondance. Résultat : 1.
Fonction précédente : |
Fonction suivante : |
Par carabde | Mis à jour le 23 avril 2026