Menu

Trier un tableau PHP : sort(), usort(), asort() et ksort()

sort($array) trie une liste sur place, asort et ksort trient un tableau associatif par valeur ou par clé, et usort trie avec votre propre comparaison. Toutes ces fonctions, trier un tableau multidimensionnel par une colonne, et éviter l'erreur classique $sorted = sort($arr).

Cette page contient des éditeurs exécutables - modifiez, exécutez et voyez la sortie instantanément.

sort($array) trie un tableau dans l'ordre croissant, sur place. Elle modifie la variable que vous passez et renvoie true, vous l'appelez donc seule sur sa ligne puis vous utilisez le tableau. rsort() trie dans l'ordre décroissant.

PHP a une fonction de tri pour chaque combinaison de « par valeur ou par clé », « croissant ou décroissant » et « garder les clés ou non » :

FonctionTrie parOrdreClés
sortvaleurcroissantrenumérotées 0, 1, 2
rsortvaleurdécroissantrenumérotées
asortvaleurcroissantgardées
arsortvaleurdécroissantgardées
ksortclécroissantgardées
krsortclédécroissantgardées
usortvotre fonctionà votre choixrenumérotées
uasortvotre fonctionà votre choixgardées
uksortvotre fonction sur les clésà votre choixgardées

Trier un tableau associatif par valeur

sort() sur un tableau associatif jette les clés. Utilisez asort() pour trier par valeur en gardant chaque clé avec sa valeur, ou arsort() pour la plus grande en premier.

Trier un tableau par clé avec ksort

ksort() trie par clé, krsort() par clé dans l'ordre inverse. C'est pratique avant d'afficher des réglages ou de construire une query string dans un ordre stable.

Ordre personnalisé avec usort et l'opérateur spaceship

usort($array, $callback) vous laisse décider de l'ordre. Le callback reçoit deux éléments et renvoie un nombre négatif si le premier doit venir en premier, un nombre positif si c'est le second, et 0 s'ils sont égaux. L'opérateur spaceship <=> renvoie exactement cela.

banana et cherry ont la même longueur, donc le callback renvoie 0 pour eux et ils restent dans l'ordre qu'ils avaient déjà. Le tri de PHP est stable depuis PHP 8.0 : les éléments égaux gardent leur ordre précédent.

Trier un tableau multidimensionnel par une valeur

Pour trier une liste de lignes par un champ, comparez ce champ dans usort. Pour trier par deux champs, comparez des tableaux : <=> les compare élément par élément, donc le second champ ne départage que les égalités du premier.

La seconde comparaison place $b["age"] à gauche et $a["age"] à droite, ce qui inverse uniquement l'ordre des âges. array_multisort(array_column($people, 'city'), SORT_ASC, array_column($people, 'age'), SORT_DESC, $people) donne le même ordre sans callback : elle trie selon les colonnes extraites et réordonne $people en conséquence.

Ordre naturel et options de tri

Par défaut, PHP compare les nombres comme des nombres et les chaînes comme des chaînes. Les noms de fichiers contenant des nombres se trient d'une façon inattendue : img10 vient avant img2, et tous les noms en majuscules viennent avant tous ceux en minuscules. Les options changent la manière de comparer les valeurs.

SORT_NATURAL lit les suites de chiffres comme des nombres, SORT_FLAG_CASE ignore majuscules et minuscules, et SORT_STRING force une comparaison caractère par caractère même pour les chaînes numériques. natsort() et natcasesort() reposent sur la même idée mais gardent les clés.

Erreur fréquente : affecter le résultat de sort

Toutes les fonctions de tri renvoient true et modifient le tableau que vous passez. Affecter la valeur de retour fait perdre le tableau :

Si vous avez besoin d'une copie triée tout en gardant l'original, copiez d'abord le tableau dans une nouvelle variable et triez la copie, comme le fait plus haut l'exemple asort avec $copy.

Questions fréquentes

Pourquoi sort() renvoie-t-elle true au lieu du tableau trié ?

Les fonctions de tri de PHP trient le tableau sur place, via une référence, et renvoient true. Appelez sort($arr); seule sur sa ligne et utilisez $arr ensuite. Écrire $arr = sort($arr); remplace votre tableau par true.

Comment trier un tableau associatif par valeur en gardant les clés ?

Utilisez asort($arr) pour l'ordre croissant ou arsort($arr) pour l'ordre décroissant. sort() et rsort() trient aussi par valeur mais jettent les clés et renumérotent depuis 0.

Comment trier un tableau multidimensionnel par une valeur en PHP ?

Utilisez usort avec l'opérateur spaceship sur le champ : usort($rows, fn($a, $b) => $a['age'] <=> $b['age']);. Échangez $a et $b pour l'ordre décroissant, et comparez des tableaux comme [$a['city'], $a['age']] <=> [$b['city'], $b['age']] pour trier sur deux champs.

Le tri PHP est-il stable ?

Oui, depuis PHP 8.0 toutes les fonctions de tri sont stables : les éléments considérés comme égaux gardent l'ordre qu'ils avaient avant le tri. C'est ce qui permet de trier par un champ puis par un autre comme on s'y attend.

Comment trier des chaînes contenant des nombres dans l'ordre naturel ?

Utilisez natsort($arr) ou sort($arr, SORT_NATURAL), qui placent img2 avant img10. Ajoutez SORT_FLAG_CASE (SORT_NATURAL | SORT_FLAG_CASE) ou utilisez natcasesort pour ignorer majuscules et minuscules.

Illustration des langages de programmation de Coddy

Apprendre à coder avec Coddy

COMMENCER