Comment utiliser Arsort combiné avec array_map pour obtenir la meilleure façon de trier les données complexes?
Dans PHP, Arsort et Array_Map sont deux fonctions très utiles. Le premier est utilisé pour trier les tableaux dans l'ordre descendant par valeur, tandis que le second peut être utilisé pour personnaliser chaque élément du tableau. Ces deux fonctions peuvent être combinées pour réaliser le tri de données complexes, en particulier lorsqu'ils traitent des tableaux multidimensionnels ou doivent trier les données en fonction de certaines conditions, qui possèdent des scénarios d'application puissants.
Cet article expliquera comment utiliser Arsort et Array_Map pour obtenir la meilleure façon de trier les données complexes et d'aider tout le monde à mieux le comprendre à travers des exemples pratiques.
Arsort : Arsort est utilisé pour trier les tableaux dans l'ordre descendant par valeur, gardant la relation d'index inchangée. Si la valeur du tableau est numérique, Arsort trie le tableau par taille, et si la valeur est une chaîne, elle est triée dans l'ordre du dictionnaire.
array_map : array_map nous permet d'appliquer une fonction de rappel à chaque élément du tableau, renvoyant ainsi un nouveau tableau. Avant de trier, utilisez Array_Map pour convertir, formater ou extraire des données en éléments du tableau pour répondre aux exigences de tri.
Supposons que nous ayons un tableau multidimensionnel qui stocke les noms et notes des étudiants, que nous voulons trier par notes.
<span><span><span class="hljs-variable">$students</span></span><span> = [
[</span><span><span class="hljs-string">"name"</span></span><span> => </span><span><span class="hljs-string">"Alice"</span></span><span>, </span><span><span class="hljs-string">"score"</span></span><span> => </span><span><span class="hljs-number">90</span></span><span>],
[</span><span><span class="hljs-string">"name"</span></span><span> => </span><span><span class="hljs-string">"Bob"</span></span><span>, </span><span><span class="hljs-string">"score"</span></span><span> => </span><span><span class="hljs-number">75</span></span><span>],
[</span><span><span class="hljs-string">"name"</span></span><span> => </span><span><span class="hljs-string">"Charlie"</span></span><span>, </span><span><span class="hljs-string">"score"</span></span><span> => </span><span><span class="hljs-number">85</span></span><span>],
[</span><span><span class="hljs-string">"name"</span></span><span> => </span><span><span class="hljs-string">"David"</span></span><span>, </span><span><span class="hljs-string">"score"</span></span><span> => </span><span><span class="hljs-number">95</span></span><span>]
];
</span></span>
Nous voulons trier ces étudiants par ordre décroissant par score .
Tout d'abord, utilisez Array_Map pour extraire le score ( score ), puis triez les scores en ordre décroissant avec Arsort , et réorganisez enfin le tableau des étudiants en fonction des scores triés.
<span><span><span class="hljs-comment">// Extraire les résultats des élèves</span></span><span>
</span><span><span class="hljs-variable">$scores</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_map</span></span><span>(function(</span><span><span class="hljs-variable">$student</span></span><span>) {
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$student</span></span><span>[</span><span><span class="hljs-string">'score'</span></span><span>];
}, </span><span><span class="hljs-variable">$students</span></span><span>);
</span><span><span class="hljs-comment">// Trier les résultats dans l'ordre descendant</span></span><span>
</span><span><span class="hljs-title function_ invoke__">arsort</span></span><span>(</span><span><span class="hljs-variable">$scores</span></span><span>);
</span><span><span class="hljs-comment">// Réorganisez le tableau étudiant en fonction des notes triées</span></span><span>
</span><span><span class="hljs-variable">$sorted_students</span></span><span> = [];
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$scores</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$index</span></span><span> => </span><span><span class="hljs-variable">$score</span></span><span>) {
</span><span><span class="hljs-variable">$sorted_students</span></span><span>[] = </span><span><span class="hljs-variable">$students</span></span><span>[</span><span><span class="hljs-variable">$index</span></span><span>];
}
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$sorted_students</span></span><span>);
</span></span>
array_map : nous utilisons array_map pour exécuter une fonction anonyme sur chaque élément (par étudiant) dans le tableau des étudiants $ , qui renvoie les notes de l'étudiant. Enfin, nous obtenons un tableau de scores $ qui ne contiennent que des notes.
Arsort : Utilisez Arsort pour trier le tableau de score en ordre décroissant pour vous assurer que les étudiants ayant des notes élevées sont au premier plan.
Réorganisez le tableau étudiant : Arsort renverra un tableau trié par les notes, mais nous devons également réorganiser le tableau d'étudiant d'origine en fonction de l'index trié. Ici, une boucle FOREAK est utilisée pour éliminer les éléments du tableau d'étudiants $ les étudiants en séquence en fonction de l'indice de qualité tri, formant un nouveau tableau d'étudiant triée $ trid_students .
Supposons que nous devons trier par plusieurs critères, tels que le tri par les notes en premier, et si les notes sont les mêmes, tri par ordre alphabétique du nom. À l'heure actuelle, nous pouvons utiliser Array_map pour traiter ces conditions, puis combiner array et array_multisort pour terminer le tri complexe.
<span><span><span class="hljs-variable">$students</span></span><span> = [
[</span><span><span class="hljs-string">"name"</span></span><span> => </span><span><span class="hljs-string">"Alice"</span></span><span>, </span><span><span class="hljs-string">"score"</span></span><span> => </span><span><span class="hljs-number">90</span></span><span>],
[</span><span><span class="hljs-string">"name"</span></span><span> => </span><span><span class="hljs-string">"Bob"</span></span><span>, </span><span><span class="hljs-string">"score"</span></span><span> => </span><span><span class="hljs-number">75</span></span><span>],
[</span><span><span class="hljs-string">"name"</span></span><span> => </span><span><span class="hljs-string">"Charlie"</span></span><span>, </span><span><span class="hljs-string">"score"</span></span><span> => </span><span><span class="hljs-number">90</span></span><span>],
[</span><span><span class="hljs-string">"name"</span></span><span> => </span><span><span class="hljs-string">"David"</span></span><span>, </span><span><span class="hljs-string">"score"</span></span><span> => </span><span><span class="hljs-number">85</span></span><span>]
];
</span><span><span class="hljs-comment">// Extraire les scores et les noms</span></span><span>
</span><span><span class="hljs-variable">$scores</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_map</span></span><span>(function(</span><span><span class="hljs-variable">$student</span></span><span>) {
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$student</span></span><span>[</span><span><span class="hljs-string">'score'</span></span><span>];
}, </span><span><span class="hljs-variable">$students</span></span><span>);
</span><span><span class="hljs-variable">$names</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_map</span></span><span>(function(</span><span><span class="hljs-variable">$student</span></span><span>) {
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$student</span></span><span>[</span><span><span class="hljs-string">'name'</span></span><span>];
}, </span><span><span class="hljs-variable">$students</span></span><span>);
</span><span><span class="hljs-comment">// Trier par ordre décroissant des notes,Trier par commande ascendante</span></span><span>
</span><span><span class="hljs-title function_ invoke__">array_multisort</span></span><span>(</span><span><span class="hljs-variable">$scores</span></span><span>, SORT_DESC, </span><span><span class="hljs-variable">$names</span></span><span>, SORT_ASC, </span><span><span class="hljs-variable">$students</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$students</span></span><span>);
</span></span>
Dans cet exemple, nous utilisons Array_Multisort , qui nous permet de trier les données en fonction de plusieurs tableaux. Tout d'abord, triez dans l'ordre descendant dans le score , et si les notes sont les mêmes, triez en ordre ascendant au nom .
La combinaison d' Arsort et Array_Map fournit des capacités puissantes pour le tri des données complexes. Nous pouvons traiter les données via array_map ou extraire des champs clés avant de tri, puis trier dans l'ordre descendant via array_multisort , et même le tri multi-conditionnel en combinaison avec array_multisort .
En utilisant de manière flexible ces fonctions, nous pouvons trier plus efficacement et plus facilement lors du traitement des tableaux multidimensionnels et des données complexes, améliorant la lisibilité et l'efficacité d'exécution du code.
Étiquettes associées:
array_map