Tri par ordre naturel
Fait partie de la section Logique & Flux du Journey PHP de Coddy — leçon 24 sur 68.
Bien que les fonctions de tri standard de PHP fonctionnent bien dans la plupart des cas, elles peuvent produire des résultats inattendus lors du tri de chaînes de caractères contenant des nombres. La fonction natsort() résout ce problème en utilisant un algorithme d'« ordre naturel » qui trie les chaînes de la manière dont les humains s'y attendraient naturellement.
Considérez cet exemple avec des noms de fichiers :
<?php
$files = ["file1.txt", "file10.txt", "file2.txt", "file20.txt"];
// Regular sort() produces: file1.txt, file10.txt, file2.txt, file20.txt
sort($files);
print_r($files);
// Reset the array
$files = ["file1.txt", "file10.txt", "file2.txt", "file20.txt"];
// natsort() produces: file1.txt, file2.txt, file10.txt, file20.txt
natsort($files);
print_r($files);
?>La différence est cruciale : le sort() classique compare les chaînes de caractères caractère par caractère, ainsi "file10.txt" arrive avant "file2.txt" car "1" arrive avant "2" en ASCII. Cependant, natsort() reconnaît les parties numériques et les trie numériquement, plaçant "file2.txt" avant "file10.txt" comme on s'y attendrait naturellement.
Comme d'autres fonctions de tri PHP, natsort() modifie directement le tableau d'origine. Cela le rend particulièrement utile pour organiser des listes de fichiers, des numéros de version ou toute donnée où les chaînes contiennent des nombres intégrés qui devraient être triés numériquement plutôt qu'alphabétiquement.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Défi
FacileVous recevrez une entrée : un tableau de numéros de version de logiciel au format JSON. Lisez l'entrée, convertissez la chaîne JSON en un tableau, utilisez natsort() pour trier les numéros de version dans l'ordre naturel, et affichez le tableau trié en utilisant print_r().
Format d'entrée : Une ligne contenant un tableau JSON de chaînes de version (exemple : ["v1.10","v1.2","v1.20","v1.3"])
Sortie attendue : Le tableau trié dans l'ordre naturel, affiché à l'aide de print_r()
Aide-mémoire
La fonction natsort() trie les chaînes de caractères en utilisant l'« ordre naturel » - la manière dont les humains s'attendent naturellement à ce que les chaînes contenant des chiffres soient triées.
La fonction sort() classique compare les chaînes caractère par caractère, tandis que natsort() reconnaît les parties numériques et les trie numériquement :
$files = ["file1.txt", "file10.txt", "file2.txt", "file20.txt"];
// Le tri sort() classique produit : file1.txt, file10.txt, file2.txt, file20.txt
sort($files);
// natsort() produit : file1.txt, file2.txt, file10.txt, file20.txt
natsort($files);
print_r($files);Comme les autres fonctions de tri PHP, natsort() modifie directement le tableau d'origine. Elle est particulièrement utile pour les listes de fichiers, les numéros de version ou toute donnée contenant des nombres intégrés qui devraient être triés numériquement.
Essayez vous-même
<?php
// Lire l'entrée
$input = fgets(STDIN);
// Convertir la chaîne JSON en tableau
$versions = (array)json_decode($input, true);
// TODO: Écrivez votre code ci-dessous pour trier le tableau en utilisant natsort()
// Afficher le tableau trié
print_r($versions);
?>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 classement