W3docs

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): int

Elle 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 :

  • 0 si les deux chaînes sont égales (en ignorant la casse).
  • Une valeur inférieure à 0 si $string1 est « inférieure » à $string2.
  • Une valeur supérieure à 0 si $string1 est « 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

php— editable, runs on the server

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 ASCII A–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'extension intl.
  • Les espaces et les caractères en fin de chaîne ont de l'importance. strcasecmp("yes", "yes ") est non nul. Utilisez trim() 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.

Entraînement

Pratique
Que fait la fonction strcasecmp() en PHP ?
Que fait la fonction strcasecmp() en PHP ?
Was this page helpful?