strnatcasecmp

strnatcasecmp($string1, $string2)

Compare deux chaînes dans l’ordre naturel comme strnatcmp(), mais ignore la différence entre majuscules et minuscules. Les nombres à l’intérieur du texte sont traités comme des nombres, img2.png passe donc avant IMG10.png.

Paramètres

  • $string1, $string2 – les chaînes à comparer.

Exemples

var_dump(strnatcasecmp("img2.png", "IMG10.png") < 0); // bool(true)
// strnatcmp respecte la casse – elle place les majuscules en premier
var_dump(strnatcmp("img2.png", "IMG10.png") < 0); // bool(false)
var_dump(strnatcasecmp("Chapitre 2", "chapitre 2")); // int(0)
// trier des noms de fichiers
$files = array("IMG10.png", "img2.png", "Img1.png");
usort($files, "strnatcasecmp");
echo implode(", ", $files); // Img1.png, img2.png, IMG10.png
// natcasesort trie de la même façon et garde les clés
$chapters = array("chapitre 10", "Chapitre 2", "chapitre 1");
natcasesort($chapters);
echo implode(", ", $chapters); // chapitre 1, Chapitre 2, chapitre 10
echo implode(", ", array_keys($chapters)); // 2, 1, 0
// la même chose avec sort et des options (les clés sont renumérotées)
$parts = array("Partie 10", "partie 2", "PARTIE 1");
sort($parts, SORT_NATURAL | SORT_FLAG_CASE);
echo implode(", ", $parts); // PARTIE 1, partie 2, Partie 10

Points d’attention

  • Elle n’ignore la casse que pour les lettres sans accent. Elle ne considère pas « Été » et « ÉTÉ » comme le même mot, car « é » et « É » sont des octets différents en UTF-8.
  • Elle traite un nombre après un point comme un nombre entier : pour elle, « 1.5 » est plus petit que « 1.10 ». Pour les versions de programmes, il existe version_compare().
  • L’égalité donne 0, exactement comme avec strcmp(). Fiez-vous uniquement au signe du résultat.
  • Trier selon les règles d’une langue, avec les nombres et les accents, c’est ce que sait faire la classe Collator de l’extension intl.

Fonctions associées :
strnatcmp()
strcasecmp()
usort()