substr_compare
substr_compare($haystack, $needle, $offset, $length, $case_insensitive)
Compare une partie d’une chaîne à partir d’une position donnée avec une seconde chaîne, sans devoir la découper avec substr(). Renvoie 0 en cas d’égalité, sinon un nombre négatif ou positif.
Paramètres
- $haystack – la chaîne dont une partie est comparée.
- $needle – la chaîne avec laquelle comparer.
- $offset – l’endroit où commence la partie. Une valeur négative compte depuis la fin.
- $length – facultatif, combien de caractères comparer. Sans lui, tout le reste depuis la position est comparé.
- $case_insensitive – facultatif, true = ignorer la différence entre majuscules et minuscules. Par défaut false.
Exemples
// le nom de fichier se termine-t-il par ".jpg", quelle que soit la casse ?
var_dump(substr_compare("vacances.JPG", ".jpg", -4, 4, true) === 0); // bool(true)
// compare 2 caractères à partir de la position 1
var_dump(substr_compare("abcde", "bc", 1, 2)); // int(0)
// sans longueur, tout le reste depuis la position est comparé ("cde" avec "cd")
var_dump(substr_compare("abcde", "cd", 2) > 0); // bool(true)
Points d’attention
- Comparez le résultat avec zéro. En cas de différence, le nombre renvoyé n’est pas garanti.
- Une position au-delà de la fin de la chaîne : PHP 7.4 affiche un avertissement et renvoie false, PHP 8 lève une exception ValueError. Une position négative avant le début de la chaîne ne provoque pas d’erreur, la comparaison commence au début.
- En PHP 8, str_starts_with() et str_ends_with() sont plus claires pour tester le début et la fin, mais elles respectent la casse.
- L’ignorance de la casse ne vaut que pour les lettres sans accent. Elle considère « É » et « é » comme différents.
- Elle travaille avec des octets. Pour un texte avec accents, les positions et les longueurs ne sont pas des nombres de caractères.
Fonctions associées :
substr()
strncasecmp()
strcmp()
str_starts_with()
str_ends_with()