uksort
uksort($array, $callback)
Trie un tableau par clés avec votre propre fonction de comparaison, les valeurs restent avec leurs clés. Elle modifie directement le tableau et renvoie true.
Paramètres
- $array – le tableau à trier. Ce doit être une variable.
- $callback – une fonction qui compare deux clés. Elle renvoie un nombre négatif quand la première doit venir avant, un nombre positif quand elle doit venir après, et zéro quand elles sont égales.
Exemples
// tri naturel des clés : b9 avant b10
$array = array("b10" => 1, "b9" => 2, "a1" => 3);
uksort($array, "strnatcmp");
echo implode(",", array_keys($array)); // a1,b9,b10
// ksort compare caractère par caractère
ksort($array);
echo implode(",", array_keys($array)); // a1,b10,b9
// sans tenir compte de la casse
$names = array("B" => 1, "a" => 2, "c" => 3);
uksort($names, "strcasecmp");
echo implode(",", array_keys($names)); // a,B,c
// un ordre personnalisé des éléments d'après une liste
$order = array_flip(array("nom", "email", "telephone"));
$data = array("telephone" => "0612345678", "nom" => "Jean", "email" => "jean@exemple.fr");
uksort($data, function ($a, $b) use ($order) { return $order[$a] <=> $order[$b]; });
echo implode(",", array_keys($data)); // nom,email,telephone
// lettres accentuées dans les clés dans l'ordre alphabétique
$cities = array("Zürich" => 1, "Évian" => 2, "Amsterdam" => 3);
$collator = new Collator("fr_FR");
uksort($cities, function ($a, $b) use ($collator) { return $collator->compare($a, $b); });
echo implode(",", array_keys($cities)); // Amsterdam,Évian,Zürich
Points d’attention
- La fonction de comparaison reçoit les clés, pas les valeurs. uasort() trie par valeurs.
- La fonction doit renvoyer un entier (négatif, zéro, positif), pas true et false.
- Les clés écrites comme des entiers arrivent dans la fonction comme des nombres, pas comme des chaînes. Les fonctions de chaînes les convertissent elles-mêmes, mais avec la vérification stricte des types, elles finissent par une erreur.
- Elle renvoie true, pas le tableau trié.
Fonctions associées :
ksort()
uasort()
strnatcmp()