Tri d'un tableau par valeur de colonne en PHP : tout ce qu'il faut savoir

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Tri d'un tableau par valeur de colonne en PHP : guide pour ceux qui en ont marre de chercher

\n\n

Avez-vous déjà été confronté à une situation où vous avez une liste d'utilisateurs, de produits ou de commandes sous forme de tableau de tableaux associatifs, et vous devez les trier selon un champ ? Par exemple, par âge, prix ou date d'inscription. Si oui, vous n'êtes pas seul. Cette question sur Stack Overflow a recueilli des milliers de vues et des dizaines de votes. Et aujourd'hui, nous allons l'éclaircir une fois pour toutes.

\n\n

Dans cet article, nous ne montrerons pas seulement comment fonctionnent usort et array_multisort. Nous répondrons aux questions les plus fréquentes des développeurs : comment trier par une clé imbriquée, comment conserver les clés, comment trier par plusieurs champs, et que faire si les données proviennent d'une base de données.

\n\n

C'est parti !

\n\n

Qu'est-ce qu'un tableau de tableaux associatifs et pourquoi le trier ?

\n\n

Imaginez que vous ayez une liste d'utilisateurs :

\n\n
$users = [\n    ['name' => 'Анна', 'age' => 25, 'city' => 'Москва'],\n    ['name' => 'Борис', 'age' => 30, 'city' => 'Санкт-Петербург'],\n    ['name' => 'Виктор', 'age' => 22, 'city' => 'Казань'],\n];
\n\n

C'est un tableau multidimensionnel typique en PHP, où chaque élément est un tableau associatif avec les mêmes clés. Il est souvent nécessaire d'afficher une telle liste triée selon un champ : par âge (du plus jeune au plus âgé), par nom (ordre alphabétique) ou par ville.

\n\n

Les fonctions standard de PHP comme sort() ou asort() ne sont pas utiles ici – elles fonctionnent avec des valeurs simples, pas avec des structures imbriquées. Des outils spéciaux sont nécessaires.

\n\n

La méthode la plus populaire : usort avec une fonction anonyme

\n\n

Si vous allez sur Stack Overflow et ouvrez la discussion "Sort an array of associative arrays by column value", dans 90% des cas, on vous recommandera usort. C'est logique : la fonction usort permet de définir votre propre logique de comparaison de deux éléments du tableau.

\n\n

Comment trier un tableau par un seul champ (âge)

\n\n

Supposons que nous voulions trier nos utilisateurs par âge croissant :

\n\n
<?php\n$users = [\n    ['name' => 'Анна', 'age' => 25, 'city' => 'Москва'],\n    ['name' => 'Борис', 'age' => 30, 'city' => 'Санкт-Петербург'],\n    ['name' => 'Виктор', 'age' => 22, 'city' => 'Казань'],\n];\n\nusort($users, function($a, $b) {\n    return $a['age'] <=> $b['age'];\n});\n\nprint_r($users);\n?>
\n\n

Résultat :

\n
Array\n(\n    [0] => Array ( [name] => Виктор [age] => 22 [city] => Казань )\n    [1] => Array ( [name] => Анна [age] => 25 [city] => Москва )\n    [2] => Array ( [name] => Борис [age] => 30 [city] => Санкт-Петербург )\n)
\n\n

Notez que nous utilisons l'opérateur de navigation spatiale <=> (spaceship), apparu en PHP 7. Il retourne -1, 0 ou 1, ce qui est parfait pour les fonctions de tri. Si vous souhaitez trier par ordre décroissant, inversez simplement $a et $b :

\n\n
usort($users, function($a, $b) {\n    return $b['age'] <=> $a['age'];\n});
\n\n

Tri par un champ de type chaîne (nom)

\n\n

Pour les chaînes, c'est tout aussi simple. Vous voulez trier les utilisateurs par nom dans l'ordre alphabétique ? Voici :

\n\n
usort($users, function($a, $b) {\n    return strcmp($a['name'], $b['name']);\n});
\n\n

Ou utilisez à nouveau <=> – il fonctionne aussi avec les chaînes :

\n\n
usort($users, function($a, $b) {\n    return $a['name'] <=> $b['name'];\n});
\n\n

Questions fréquentes et pièges à éviter

\n\n

1. Comment trier par une clé imbriquée ?

\n\n

Parfois, les données ont une structure plus profonde. Par exemple, chaque utilisateur a un tableau profile

Blogs

Book Recommendations