logo oujood
🔍

La fonction substr_count() en PHP

Apprenez à compter les occurrences d'une sous-chaîne avec substr_count(), avec ou sans paramètres de position.

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.

  📋 Copier le code

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


Par carabde | Mis à jour le 23 avril 2026