strripos()
La fonction strripos() en PHP trouve la dernière occurrence d'une sous-chaîne sans tenir compte de la casse. Découvrez sa syntaxe et ses exemples.
Introduction
La fonction strripos() en PHP trouve la position de la dernière occurrence d'une sous-chaîne dans une autre chaîne, sans tenir compte de la casse. Le nom se décompose ainsi : str (string, chaîne) + r (reverse, c'est-à-dire recherche depuis la droite) + i (insensible à la casse) + pos (position).
C'est le pendant insensible à la casse de strrpos() : strripos("Hello", "L") et strripos("Hello", "l") renvoient toutes deux la même position, alors que strrpos() traiterait L et l comme des caractères différents.
Ce chapitre couvre la syntaxe, la valeur de retour (et le piège lié à false contre lequel il faut se prémunir), le paramètre optionnel $offset — y compris les décalages négatifs — et la relation entre strripos() et les autres fonctions de recherche dans les chaînes.
Syntaxe
strripos(string $haystack, string $needle, int $offset = 0): int|false| Paramètre | Description |
|---|---|
$haystack | La chaîne dans laquelle effectuer la recherche. |
$needle | La sous-chaîne à rechercher. |
$offset | Optionnel. Point de départ de la recherche. Une valeur positive saute les premiers $offset caractères ; une valeur négative arrête la recherche à autant de caractères avant la fin de la chaîne. Par défaut : 0. |
Valeur de retour : l'index (base zéro) de la dernière occurrence trouvée, ou false si $needle n'est pas trouvé.
Toujours comparer avec !==
strripos() renvoie 0 lorsque la correspondance se trouve au tout début de la chaîne, et 0 est falsy en PHP. Une vérification lâche comme if (strripos(...)) traiterait à tort une correspondance en position zéro comme « non trouvée ». Comparez toujours avec false via l'opérateur strict !== :
<?php
$haystack = "Apple pie";
$pos = strripos($haystack, "a"); // matches "A" at index 0
if ($pos !== false) {
echo "Found at index $pos"; // Found at index 0
} else {
echo "Not found";
}Exemple de base
Il y a deux caractères o/O dans Hello World — un dans Hello (index 4) et un dans World (index 7). Comme strripos() signale la dernière correspondance, la sortie est :
Found last occurrence of 'o' in 'Hello World' at position 7Correspondance insensible à la casse
La recherche traite les lettres majuscules et minuscules comme égales, de sorte que la casse du $needle n'a pas d'importance :
<?php
$string = "Hello World, hello PHP";
echo strripos($string, "hello"), "\n"; // 13 — matches "hello" in "hello PHP"
echo strripos($string, "HELLO"), "\n"; // 13 — same match, case ignoredLe dernier hello/HELLO/Hello dans la chaîne commence à l'index 13, quelle que soit la manière dont vous mettez en majuscule le needle.
Utiliser le paramètre $offset
Un décalage positif démarre la recherche après les premiers $offset caractères :
<?php
$string = "Hello World";
echo strripos($string, "o", 5), "\n"; // 7 — only the "o" in "World" is consideredUn décalage négatif fait s'arrêter la recherche à autant de caractères avant la fin de la chaîne, ce qui est pratique pour trouver la dernière correspondance dans tout sauf une portion finale :
<?php
$string = "abcabc";
echo strripos($string, "b", -2), "\n"; // 4 — last "b" within the truncated search windowFonctions associées
Choisissez la bonne fonction de recherche selon le besoin :
strrpos()— identique àstrripos()mais sensible à la casse.stripos()— trouve la première occurrence sans tenir compte de la casse.strpos()— trouve la première occurrence en tenant compte de la casse.strstr()— renvoie le reste de la chaîne à partir de la première correspondance, plutôt qu'une position.substr()— extrait une partie de la chaîne une fois la position connue.
| Fonction | Direction | Sensible à la casse ? |
|---|---|---|
strpos() | première correspondance | oui |
stripos() | première correspondance | non |
strrpos() | dernière correspondance | oui |
strripos() | dernière correspondance | non |
Conclusion
strripos() localise la dernière occurrence insensible à la casse d'une sous-chaîne et renvoie son index, ou false en l'absence de correspondance. N'oubliez pas de tester le résultat avec !== pour qu'une correspondance en position zéro ne soit pas confondue avec un échec, et utilisez $offset (positif ou négatif) pour limiter la fenêtre de recherche. Si vous avez besoin de la première correspondance ou si la casse est importante, utilisez l'une des fonctions associées ci-dessus.