natcasesort()
Guide complet sur la fonction natcasesort() en PHP : tri naturel insensible à la casse, différences avec natsort() et sort(), et pièges courants.
Introduction
natcasesort() trie un tableau en utilisant un algorithme d'ordre naturel avec une comparaison insensible à la casse. L'« ordre naturel » signifie que les chaînes sont ordonnées comme un humain le ferait — ainsi img10 vient après img2, et non avant comme le ferait un tri alphabétique classique.
Cette page explique ce qu'est le tri naturel, en quoi natcasesort() diffère de natsort() et de sort(), et les pièges liés aux clés et aux valeurs de retour.
Syntaxe
natcasesort(array &$array): boolLa fonction prend le tableau par référence, le trie sur place et retourne true en cas de succès. Il n'est pas nécessaire d'assigner le résultat — le tableau passé en argument est modifié directement.
| Détail | Comportement |
|---|---|
| Tri | Sur place (par référence) |
| Clés | Préservées — les paires clé/valeur restent liées |
| Ordre | Croissant, naturel, insensible à la casse |
| Retourne | bool (true en cas de succès) |
Pourquoi l'ordre naturel est important
Un tri alphabétique classique compare les chaînes caractère par caractère, de sorte que "img10" se retrouve avant "img2" car 1 est inférieur à 2. Ce n'est rarement ce qu'une personne attend lorsque des noms de fichiers ou des étiquettes contiennent des chiffres. L'ordre naturel traite les suites de chiffres comme des nombres, produisant ainsi un résultat plus intuitif.
Exemple de base
Résultat :
Array
(
[3] => Boston
[2] => Chicago
[1] => Los Angeles
[0] => New York
[4] => San Francisco
)Remarquez que les clés (3, 2, 1, 0, 4) ne sont pas réindexées — chaque valeur conserve sa clé d'origine. Si vous avez besoin de réinitialiser les clés à 0, 1, 2…, utilisez sort() à la place, ou passez le résultat par array_values().
natcasesort() vs natsort() vs sort()
La différence entre ces trois fonctions est plus facile à observer avec des chaînes en casse mixte contenant des chiffres :
<?php
$files = array("IMG10.png", "img12.png", "img2.png", "IMG1.png", "img10.png");
$a = $files;
natcasesort($a); // natural + case-insensitive
print_r($a);Résultat :
Array
(
[3] => IMG1.png
[2] => img2.png
[0] => IMG10.png
[4] => img10.png
[1] => img12.png
)Avec natsort() (sensible à la casse), les mêmes données sont triées différemment, car les lettres majuscules sont comparées comme inférieures aux minuscules — donc IMG10 se retrouve avant img2 :
Array
(
[3] => IMG1.png
[0] => IMG10.png
[2] => img2.png
[4] => img10.png
[1] => img12.png
)Et sort() (tri classique, non naturel) réindexe les clés et place img10/img12 avant img2 :
Array
(
[0] => IMG1.png
[1] => IMG10.png
[2] => img10.png
[3] => img12.png
[4] => img2.png
)Utilisez natcasesort() lorsque l'ordre doit correspondre à l'intuition humaine et que la casse doit être ignorée — par exemple pour lister des noms de fichiers téléversés par des utilisateurs qui auraient pu taper IMG ou img.
Pièges à éviter
- La fonction retourne un booléen, pas le tableau trié.
$sorted = natcasesort($arr);assignetrueà$sorted, pas vos données. Les données se trouvent dans$arr. - Les clés sont préservées. Cela peut poser problème dans du code qui suppose des clés basées sur
0par la suite. Utilisezarray_values($arr)si vous avez besoin d'une liste propre. - Les valeurs non-string sont comparées comme des chaînes. Les nombres, les booléens, etc. sont convertis en chaînes avant la comparaison.
Fonctions associées
natsort()— ordre naturel, sensible à la casse.sort()— tri croissant classique, réindexe les clés.asort()— tri croissant qui préserve les clés (non naturel).usort()— tri avec votre propre fonction de comparaison.
Disponible depuis PHP 4.0.0.