En PHP, nous rencontrons généralement des situations où nous devons trier les tableaux. Pour le tri des lettres ou des nombres ordinaires, des fonctions telles que Sort () et ASORT () sont suffisantes pour répondre aux besoins. Mais lorsque nous devons effectuer un tri personnalisé plus complexe des tableaux, en particulier lorsque nous traitons des réseaux de chaînes, nous devons utiliser des méthodes de tri plus flexibles. Cet article présentera comment utiliser la fonction strnatcasecmp et array_map pour obtenir une méthode de tri plus intelligente et améliorer l'effet de tri.
StrnatcasecMP est une fonction de comparaison de chaîne intégrée dans PHP. Lors de la comparaison des chaînes, il peut considérer l'ordre de taille des nombres, pas seulement l'ordre des lettres. Par exemple, StrnatcasecMP classera "10" avant "2", tandis que StrCMP ne fera pas cet ajustement.
D'un autre côté, la fonction Array_Map nous permet d'appliquer une fonction de rappel à chaque élément du tableau, renvoyant un nouveau tableau. Par conséquent, la combinaison de strnatcasecmp avec array_map peut le rendre très pratique pour personnaliser le tri des tableaux.
Voici un exemple montrant comment personnaliser le tri des tableaux à l'aide de strnatcasecmp et array_map .
<?php
// Exemple de tableau
$array = ['item10', 'item2', 'item1', 'item20', 'item11'];
// utiliser array_map Pour traiter chaque élément
$processedArray = array_map(function($item) {
// Traiter chaque élément,Si vous avez besoin d'opérations plus complexes, vous pouvez les ajouter ici
return $item;
}, $array);
// utiliser strnatcasecmp Les fonctions sont triées naturellement
usort($processedArray, 'strnatcasecmp');
// Treat de triage imprimé
echo '<pre>';
print_r($processedArray);
echo '</pre>';
?>
Définition d'un tableau : Tout d'abord, nous définissons un tableau mixte de baignoire de $ contenant des chaînes et des chiffres.
Utilisation de Array_Map : Bien que la fonctionnalité de Array_Map n'ait pas beaucoup changé dans cet exemple, il nous offre la flexibilité de prétraiter les éléments du tableau. Array_map est utile si votre logique de tri nécessite certaines opérations sur les éléments du tableau avant de trier (par exemple, la suppression des espaces, la conversion de cas, etc.).
Utilisez USORT et StrnatcasecMP : La fonction USORT est utilisée pour trier les tableaux, et la fonction strnatcasecmp est utilisée comme fonction de rappel de comparaison. La fonction StrnatcasecMP est triée dans l'ordre naturel des cordes afin que les parties numériques soient correctement comparées et triées.
Résultat de sortie : utilisez la fonction print_r pour imprimer le tableau trié. Le résultat final est que les éléments du tableau seront organisés par ordre naturel et les nombres seront traités comme un ordre numérique, plutôt que dans l'ordre de caractère.
Par rapport à régulièrement tri () ou asort (), strnatcasecmp et array_map pour le tri personnalisé ont les avantages suivants:
Les nombres de tri sont plus naturels : pour les chaînes contenant des nombres, strnatcasecmp trie les nombres par leur taille réelle, plutôt que de les comparer un par un par un. Par exemple, "Item10" sera en avance sur "Item2" et "Item20" sera derrière "Item11", qui est plus conforme aux habitudes de tri humain que le tri des caractères traditionnel.
Prétraitement personnalisé : Array_map nous permet de personnaliser chaque élément du tableau avant de trier, tels que la suppression des espaces, un cas uniforme et même l'exécution de certaines opérations de conversion, ce qui rend le tri plus flexible.
Extensibilité : Array_map peut être utilisé en combinaison avec d'autres fonctions, apportant plus d'évolutivité et de flexibilité à la logique de tri, et convient à des scénarios plus complexes.
Si les éléments du tableau sont très complexes ou doivent être triés en fonction de plusieurs dimensions, envisagez d'utiliser la fonction Array_Multisort ou une logique de rappel plus complexe pour personnaliser davantage les règles de tri.
Dans PHP, en utilisant des combinaisons strnatcasecmp et array_map , il est facile d'obtenir un tri personnalisé plus intelligent et naturel des tableaux, en particulier pour les réseaux de chaînes contenant des nombres. De cette façon, non seulement la précision du type peut être améliorée, mais elle peut également laisser une plus grande flexibilité et un espace pour une expansion future.