W3docs

strnatcasecmp()

La fonction strnatcasecmp() en PHP compare deux chaînes sans tenir compte de la casse, en utilisant un algorithme d'ordre naturel.

Introduction

strnatcasecmp() compare deux chaînes à l'aide d'un algorithme d'"ordre naturel", en ignorant la casse. L'"ordre naturel" signifie que les nombres intégrés dans les chaînes sont comparés par leur valeur numérique plutôt que caractère par caractère — ainsi "file2" est trié avant "file10", ce qui correspond à l'ordre qu'une personne utiliserait. La comparaison alphabétique ordinaire de strcasecmp() placerait "file10" en premier, car '1' précède '2'.

Cette page présente la signature de la fonction, sa valeur de retour, ses différences avec les fonctions de comparaison associées, et son utilisation comme rappel de tri.

Syntaxe

strnatcasecmp(string $string1, string $string2): int
ParamètreDescription
$string1La première chaîne à comparer.
$string2La deuxième chaîne à comparer.

La fonction est sécurisée binaire (elle fonctionne avec des chaînes contenant des octets nuls) et insensible à la casse ("FILE" et "file" sont considérés comme égaux).

Valeur de retour

strnatcasecmp() renvoie un int dont le signe indique le résultat — la magnitude exacte est définie par l'implémentation, donc comparez toujours à 0 et non à un nombre spécifique :

RetourSignification
< 0 (négatif)$string1 est inférieur à $string2
> 0 (positif)$string1 est supérieur à $string2
0Les deux chaînes sont égales

Exemple de base

php— editable, runs on the server

Les nombres étant comparés par valeur (1 < 10), la sortie est :

file1.txt is less than file10.txt

Comparaison naturelle vs. comparaison ordinaire

C'est la raison d'être de strnatcasecmp(). Avec une comparaison ordinaire, les chaînes sont comparées caractère par caractère, donc '1' (le premier chiffre de 10) précède '2'. L'ordre naturel tient compte du nombre entier :

<?php

$a = "img12";
$b = "IMG2";

// Regular, case-insensitive: '1' < '2', so img12 comes first
echo strcasecmp($a, $b) . "\n";      // negative

// Natural, case-insensitive: 12 > 2, so img12 comes second
echo strnatcasecmp($a, $b) . "\n";   // positive

Les deux fonctions divergent sur l'ordre et strnatcasecmp() ignore la différence de casse entre IMG et img, renvoyant le résultat intuitif pour un humain.

Trier un tableau de façon naturelle

L'utilisation la plus courante est comme rappel de comparaison pour usort(), afin de trier des noms de fichiers ou des chaînes de type version :

<?php

$files = ["file10.txt", "File2.txt", "file1.txt"];

usort($files, "strnatcasecmp");

print_r($files);

Sortie :

Array
(
    [0] => file1.txt
    [1] => File2.txt
    [2] => file10.txt
)

Si vous disposez d'un tableau à trier en place par valeur, natcasesort() applique le même ordre naturel insensible à la casse tout en préservant les clés.

Fonctions associées

FonctionOrdre naturel ?Sensible à la casse ?
strnatcasecmp()OuiNon
strnatcmp()OuiOui
strcasecmp()NonNon
strcmp()NonOui

Utilisez strnatcasecmp() quand vous avez besoin à la fois de l'ordre naturel et de l'insensibilité à la casse ; choisissez strnatcmp() si la casse est importante.

Conclusion

strnatcasecmp() compare deux chaînes dans l'ordre qu'un humain attendrait — en traitant les nombres intégrés comme des nombres et en ignorant la casse des lettres. Basez toujours vos branchements sur le signe de la valeur de retour, et faites appel à cette fonction (souvent avec usort()) chaque fois que vous triez des noms de fichiers, des étiquettes ou des chaînes mêlant texte et nombres.

Pratique

Pratique
Quel est le rôle de la fonction strnatcasecmp() en PHP ?
Quel est le rôle de la fonction strnatcasecmp() en PHP ?
Was this page helpful?