strcasecmp()
Apprenez la fonction PHP strcasecmp() pour comparer deux chaînes sans tenir compte de la casse, avec sa syntaxe, ses exemples et ses pièges courants.
strcasecmp() est une fonction PHP native qui compare deux chaînes sans tenir compte de la casse — ce qui signifie que "Hello" et "hello" sont considérées comme égales. Elle effectue une comparaison binaire sécurisée et retourne un nombre qui vous indique non seulement si les chaînes diffèrent, mais également laquelle est « supérieure » dans l'ordre des octets. Cette page couvre la syntaxe, la signification réelle de la valeur de retour, des exemples pratiques, les pièges courants et les différences avec les fonctions apparentées.
Syntaxe
strcasecmp(string $string1, string $string2): intElle prend deux paramètres, tous deux obligatoires :
$string1— la première chaîne à comparer.$string2— la deuxième chaîne à comparer.
Valeur de retour
C'est la partie que la plupart des gens comprennent mal. strcasecmp() ne retourne pas true/false. Elle retourne un entier :
0si les deux chaînes sont égales (en ignorant la casse).- Une valeur inférieure à 0 si
$string1est « inférieure » à$string2. - Une valeur supérieure à 0 si
$string1est « supérieure » à$string2.
La comparaison est basée sur les valeurs d'octet des caractères (en minuscules), donc le résultat indique également l'ordre alphabétique, ce qui rend la fonction pratique pour les rappels de tri.
Exemple de base
Ici, $string1 et $string2 ne diffèrent que par la casse, donc strcasecmp() retourne 0 et la condition $result == 0 est vraie.
La sortie de ce code est :
The two strings are equal.Interpréter le signe du résultat
Lorsque les chaînes ne sont pas égales, le signe indique leur ordre. Notez que la magnitude exacte n'est pas standardisée selon les versions de PHP — seul le signe (négatif, zéro, positif) est significatif, donc comparez toujours par rapport à 0.
<?php
// "apple" comes before "Banana" alphabetically (case ignored)
var_dump(strcasecmp("apple", "Banana") < 0); // bool(true)
var_dump(strcasecmp("Banana", "apple") > 0); // bool(true)
var_dump(strcasecmp("PHP", "php") === 0); // bool(true)
?>Sortie :
bool(true)
bool(true)
bool(true)Utilisation pratique : vérification de connexion sans casse
Un usage courant est la comparaison de saisies utilisateur où la casse ne doit pas importer, comme un nom d'utilisateur ou une réponse oui/non.
<?php
$input = "ADMIN";
if (strcasecmp($input, "admin") === 0) {
echo "Welcome, admin!";
} else {
echo "Access denied.";
}
?>Sortie :
Welcome, admin!Utilisation comme comparateur de tri
Puisqu'elle retourne un entier d'ordonnancement, strcasecmp() est un rappel naturel pour usort() afin de trier des chaînes alphabétiquement en ignorant la casse.
<?php
$names = ["banana", "Apple", "cherry", "apple"];
usort($names, "strcasecmp");
print_r($names);
?>Sortie :
Array
(
[0] => Apple
[1] => apple
[2] => banana
[3] => cherry
)Pièges courants
- Elle retourne un entier, pas un booléen. Écrire
if (strcasecmp($a, $b))est un bug : le bloc s'exécute quand les chaînes sont différentes (valeur non nulle) et est ignoré quand elles sont égales (0). Comparez toujours explicitement avec=== 0. - Elle est basée sur les octets, pas sur Unicode.
strcasecmp()met en minuscules uniquement les lettres ASCIIA–Z. Les caractères accentués ou multioctets (commeÉvsé) ne sont pas traités comme égaux. Pour une comparaison multioctet tenant compte de la locale, normalisez les deux chaînes au préalable ou utilisez l'extensionintl. - Les espaces et les caractères en fin de chaîne ont de l'importance.
strcasecmp("yes", "yes ")est non nul. Utiliseztrim()pour nettoyer les saisies si nécessaire.
Fonctions apparentées
strcmp()— l'équivalent sensible à la casse ; mêmes sémantiques de retour.strncasecmp()— comparaison sans casse des n premiers caractères seulement.strtolower()— convertit une chaîne en minuscules, utile avant une comparaison manuelle.
Résumé
strcasecmp() compare deux chaînes sans tenir compte de la casse et retourne 0 lorsqu'elles correspondent, un nombre négatif quand la première est plus petite, et un nombre positif quand elle est plus grande. N'oubliez pas de tester le résultat par rapport à 0 plutôt que de le traiter comme un booléen, et utilisez strcmp() lorsque la casse doit être prise en compte.