Tri personnalisé avec 'usort'
Fait partie de la section Logique & Flux du Journey PHP de Coddy. Leçon 25 sur 68.
Lorsque les fonctions de tri intégrées de PHP ne répondent pas à vos besoins spécifiques, la fonction usort() offre une flexibilité maximale en vous permettant de définir exactement comment les éléments doivent être comparés et ordonnés. Cette fonction prend votre tableau ainsi qu’une fonction de comparaison personnalisée que vous écrivez pour déterminer la logique de tri.
La fonction de comparaison reçoit deux éléments du tableau et doit renvoyer un entier : un nombre négatif si le premier élément doit venir avant le second, zéro s’ils sont égaux, ou un nombre positif si le premier doit venir après le second.
<?php
function compareByLength($a, $b) {
return strlen($a) - strlen($b);
}
$words = ["elephant", "cat", "butterfly", "dog"];
usort($words, "compareByLength");
print_r($words);
// Affiche : Array ( [0] => cat [1] => dog [2] => elephant [3] => butterfly )
?>Dans cet exemple, la fonction de comparaison calcule la différence entre les longueurs des chaînes. Lorsque strlen($a) - strlen($b) renvoie un nombre négatif, cela signifie que la première chaîne est plus courte et doit apparaître en premier dans le tableau trié.
Comme les autres fonctions de tri de PHP, usort() modifie directement le tableau d’origine. Cette fonction puissante ouvre la voie au tri selon tous les critères que vous pouvez imaginer, qu’il s’agisse de la longueur des chaînes, d’une logique métier personnalisée ou de comparaisons complexes entre plusieurs champs.
Défi
FacileVous recevrez une seule entrée : un tableau de prix de produits au format JSON. Lisez l’entrée, convertissez la chaîne JSON en tableau, créez une fonction de comparaison qui trie les prix dans l’ordre croissant, utilisez usort() avec votre fonction de comparaison pour trier le tableau, puis affichez le tableau trié à l’aide de print_r().
Format de l’entrée : une ligne contenant un tableau JSON de nombres (exemple : [29.99,15.50,42.00,8.75,33.25])
Sortie attendue : le tableau trié par prix dans l’ordre croissant, affiché à l’aide de print_r()
Essayez vous-même
<?php
// Lire l'entrée
$input = fgets(STDIN);
$prices = json_decode($input, true);
// TODO : Créer une fonction de comparaison et utiliser usort() pour trier le tableau
// Afficher le tableau trié
print_r($prices);
?>Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique & Flux
1Fonctions avancées
Fonctions anonymesClosures et 'use'Fonctions fléchéesFonctions de rappelUtilisation de 'call_user_func'Fonctions variablesPassage par référenceFonctions récursivesRécapitulatif : Mélange de fonctions4Tableaux multidimensionnels
Créer un tableau 2DAccéder aux éléments d'un tableau 2DModifier les éléments d'un tableau 2DItérer avec des boucles imbriquéesTableaux associatifs 2DRécapitulatif : Exercice de grille simple2Manipulations avancées de tableaux
Ajouter avec 'array_push'Supprimer avec 'array_pop'Ajouter avec 'array_unshift'Supprimer avec 'array_shift'Fusionner des tableaux indexésFusionner des tableaux associatifsExtraire avec 'array_slice'Valeurs avec 'in_array'Clés avec 'array_search'Récapitulatif : Exercice Playlist3Tri des tableaux
Trier les tableaux indexés par ordre croissantTrier les tableaux indexés par ordre décroissantTrier les tableaux associatifs par valeurTrier les tableaux associatifs par cléTri par ordre naturelTri personnalisé avec 'usort'Récapitulatif : Tri d'un classementEntraînez-vous par vous-même : Compilateur PHP en ligne