Position actuelle: Accueil> Derniers articles> Dans un tableau multidimensionnel, comment utiliser la fonction Uksort pour effectuer un traitement précis de tri des clés?

Dans un tableau multidimensionnel, comment utiliser la fonction Uksort pour effectuer un traitement précis de tri des clés?

gitbox 2025-06-23

[Dans un tableau multidimensionnel, comment utiliser la fonction Uksort pour effectuer un traitement précis de tri des clés? ]]

En PHP, les tableaux sont des structures de données très puissantes et flexibles. Les tableaux multidimensionnels sont l'un des scénarios d'application courants et sont souvent utilisés pour stocker des données complexes. Cependant, nous rencontrons plusieurs fois la nécessité de trier par des clés. PHP fournit une variété de fonctions pour trier les tableaux, parmi lesquels Uksort () est une fonction qui peut personnaliser les règles de tri, qui sont souvent utilisées pour trier les tableaux en fonction des clés. Cet article se concentrera sur la façon d'utiliser la fonction uksort () pour effectuer un tri des clés précis dans les tableaux multidimensionnels.

1. Quelle est la fonction Uksort?

Uksort () est une fonction en PHP qui trie les clés d'un tableau via des fonctions de comparaison définies par l'utilisateur. La syntaxe de base de cette fonction est la suivante:

 <span><span><span class="hljs-title function_ invoke__">uksort</span></span><span>(</span><span><span class="hljs-keyword">array</span></span><span> &amp;</span><span><span class="hljs-variable">$array</span></span><span>, </span><span><span class="hljs-keyword">callable</span></span><span> </span><span><span class="hljs-variable">$cmp_function</span></span><span>): </span><span><span class="hljs-keyword">bool</span></span><span>
</span></span>
  • Array : le tableau à tri (trié par clé).

  • CMP_FUNCTION : Une fonction de rappel utilisée pour comparer les touches de tableau. La fonction de rappel doit renvoyer un entier pour déterminer l'ordre dans lequel les deux touches sont triées.

2. Structure et exigences de tri des tableaux multidimensionnels

Lorsque vous traitez avec des tableaux multidimensionnels, les éléments du tableau sont généralement également des baies. Par exemple, supposons que nous ayons un tableau multidimensionnel qui enregistre les informations des élèves, et les informations de chaque élève incluent le nom, l'âge et le score, etc.:

 <span><span><span class="hljs-variable">$students</span></span><span> = [
    </span><span><span class="hljs-string">'student1'</span></span><span> =&gt; [</span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Tom'</span></span><span>, </span><span><span class="hljs-string">'age'</span></span><span> =&gt; </span><span><span class="hljs-number">20</span></span><span>, </span><span><span class="hljs-string">'score'</span></span><span> =&gt; </span><span><span class="hljs-number">88</span></span><span>],
    </span><span><span class="hljs-string">'student2'</span></span><span> =&gt; [</span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Jerry'</span></span><span>, </span><span><span class="hljs-string">'age'</span></span><span> =&gt; </span><span><span class="hljs-number">21</span></span><span>, </span><span><span class="hljs-string">'score'</span></span><span> =&gt; </span><span><span class="hljs-number">92</span></span><span>],
    </span><span><span class="hljs-string">'student3'</span></span><span> =&gt; [</span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Alice'</span></span><span>, </span><span><span class="hljs-string">'age'</span></span><span> =&gt; </span><span><span class="hljs-number">22</span></span><span>, </span><span><span class="hljs-string">'score'</span></span><span> =&gt; </span><span><span class="hljs-number">85</span></span><span>],
    </span><span><span class="hljs-string">'student4'</span></span><span> =&gt; [</span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Bob'</span></span><span>, </span><span><span class="hljs-string">'age'</span></span><span> =&gt; </span><span><span class="hljs-number">20</span></span><span>, </span><span><span class="hljs-string">'score'</span></span><span> =&gt; </span><span><span class="hljs-number">95</span></span><span>]
];
</span></span>

Dans de tels tableaux multidimensionnels, notre objectif pourrait être de trier par une certaine clé (comme le nom, l'âge ou le score de l'élève).

3. Trier les tableaux multidimensionnels en utilisant Uksort

Pour trier par des clés dans un tableau multidimensionnel, nous devons d'abord comprendre comment personnaliser les règles de tri via uksort () . D'une manière générale, nous trions par une certaine valeur d'élément dans chaque tableau.

Supposons que nous voulons trier par l'âge de chaque élève. Étant donné que uksort () ne traite que les clés des tableaux externes et ne manipule pas directement les clés internes, nous devons accéder à l'âge de chaque élève via une fonction de comparaison et le trier en fonction.

Voici un exemple de tri par les étudiants utilisant la fonction uksort () :

 <span><span><span class="hljs-variable">$students</span></span><span> = [
    </span><span><span class="hljs-string">'student1'</span></span><span> =&gt; [</span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Tom'</span></span><span>, </span><span><span class="hljs-string">'age'</span></span><span> =&gt; </span><span><span class="hljs-number">20</span></span><span>, </span><span><span class="hljs-string">'score'</span></span><span> =&gt; </span><span><span class="hljs-number">88</span></span><span>],
    </span><span><span class="hljs-string">'student2'</span></span><span> =&gt; [</span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Jerry'</span></span><span>, </span><span><span class="hljs-string">'age'</span></span><span> =&gt; </span><span><span class="hljs-number">21</span></span><span>, </span><span><span class="hljs-string">'score'</span></span><span> =&gt; </span><span><span class="hljs-number">92</span></span><span>],
    </span><span><span class="hljs-string">'student3'</span></span><span> =&gt; [</span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Alice'</span></span><span>, </span><span><span class="hljs-string">'age'</span></span><span> =&gt; </span><span><span class="hljs-number">22</span></span><span>, </span><span><span class="hljs-string">'score'</span></span><span> =&gt; </span><span><span class="hljs-number">85</span></span><span>],
    </span><span><span class="hljs-string">'student4'</span></span><span> =&gt; [</span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Bob'</span></span><span>, </span><span><span class="hljs-string">'age'</span></span><span> =&gt; </span><span><span class="hljs-number">20</span></span><span>, </span><span><span class="hljs-string">'score'</span></span><span> =&gt; </span><span><span class="hljs-number">95</span></span><span>]
];

</span><span><span class="hljs-comment">// Fonctions de comparaison personnalisées</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">compare_age</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$a</span></span></span><span>, </span><span><span class="hljs-variable">$b</span></span><span>) {
    </span><span><span class="hljs-keyword">global</span></span><span> </span><span><span class="hljs-variable">$students</span></span><span>;
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$students</span></span><span>[</span><span><span class="hljs-variable">$a</span></span><span>][</span><span><span class="hljs-string">'age'</span></span><span>] - </span><span><span class="hljs-variable">$students</span></span><span>[</span><span><span class="hljs-variable">$b</span></span><span>][</span><span><span class="hljs-string">'age'</span></span><span>];
}

</span><span><span class="hljs-comment">// utiliseruksortTriez le tableau par l&#39;âge des étudiants</span></span><span>
</span><span><span class="hljs-title function_ invoke__">uksort</span></span><span>(</span><span><span class="hljs-variable">$students</span></span><span>, </span><span><span class="hljs-string">'compare_age'</span></span><span>);

</span><span><span class="hljs-comment">// Résultats triés de sortie</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>

expliquer:

  1. Fonction de comparaison personnalisée Compare_age : il accepte deux paramètres (touches de deux tableaux respectivement). Avec ces deux clés, nous accédons à l'âge de l'étudiant à partir du tableau des étudiants $ et le comparons, renvoyant un entier pour déterminer l'ordre de tri.

  2. uksort () Appel: Nous passons la fonction compare_age comme un argument à uksort () , qui trie les clés du tableau étudiant par âge.

4. Trier par d'autres clés

Supposons que nous voulons trier en fonction des scores des élèves, la méthode est similaire au tri d'âge, et nous avons juste besoin de modifier la valeur d'accès dans la fonction de comparaison.

 <span><span><span class="hljs-comment">// Fonctions de comparaison personnalisées(Trier par score)</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">compare_score</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$a</span></span></span><span>, </span><span><span class="hljs-variable">$b</span></span><span>) {
    </span><span><span class="hljs-keyword">global</span></span><span> </span><span><span class="hljs-variable">$students</span></span><span>;
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$students</span></span><span>[</span><span><span class="hljs-variable">$a</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">$b</span></span><span>][</span><span><span class="hljs-string">'score'</span></span><span>];
}

</span><span><span class="hljs-comment">// utiliseruksortTrier les tableaux par fractions</span></span><span>
</span><span><span class="hljs-title function_ invoke__">uksort</span></span><span>(</span><span><span class="hljs-variable">$students</span></span><span>, </span><span><span class="hljs-string">'compare_score'</span></span><span>);

</span><span><span class="hljs-comment">// Résultats triés de sortie</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>

5. Scénarios de tri complexes

Dans certains scénarios de tri complexes, nous devrons peut-être trier par plusieurs critères, par exemple, premier tri par âge, et si l'âge est le même, par score. Nous pouvons y parvenir en comparant plusieurs champs en même temps dans la fonction de comparaison:

 <span><span><span class="hljs-comment">// Fonctions de comparaison personnalisées(Trier par âge et score)</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">compare_age_and_score</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$a</span></span></span><span>, </span><span><span class="hljs-variable">$b</span></span><span>) {
    </span><span><span class="hljs-keyword">global</span></span><span> </span><span><span class="hljs-variable">$students</span></span><span>;
    </span><span><span class="hljs-comment">// Comparaison de l&#39;âge</span></span><span>
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$students</span></span><span>[</span><span><span class="hljs-variable">$a</span></span><span>][</span><span><span class="hljs-string">'age'</span></span><span>] == </span><span><span class="hljs-variable">$students</span></span><span>[</span><span><span class="hljs-variable">$b</span></span><span>][</span><span><span class="hljs-string">'age'</span></span><span>]) {
        </span><span><span class="hljs-comment">// Si l&#39;âge est le même,Trier par score</span></span><span>
        </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$students</span></span><span>[</span><span><span class="hljs-variable">$a</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">$b</span></span><span>][</span><span><span class="hljs-string">'score'</span></span><span>];
    }
    </span><span><span class="hljs-comment">// Sinon trier par âge</span></span><span>
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$students</span></span><span>[</span><span><span class="hljs-variable">$a</span></span><span>][</span><span><span class="hljs-string">'age'</span></span><span>] - </span><span><span class="hljs-variable">$students</span></span><span>[</span><span><span class="hljs-variable">$b</span></span><span>][</span><span><span class="hljs-string">'age'</span></span><span>];
}

</span><span><span class="hljs-comment">// utiliseruksortTri complexe</span></span><span>
</span><span><span class="hljs-title function_ invoke__">uksort</span></span><span>(</span><span><span class="hljs-variable">$students</span></span><span>, </span><span><span class="hljs-string">'compare_age_and_score'</span></span><span>);

</span><span><span class="hljs-comment">// Résultats triés de sortie</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>

6. Résumé

Uksort () est un outil puissant qui peut nous aider à trier les clés des tableaux en fonction des règles personnalisées. Pour les tableaux multidimensionnels, nous devons généralement accéder aux valeurs des éléments internes à travers les clés du tableau externe, puis les trier en fonction de ces valeurs. Qu'il s'agisse de tri conditionnel unique ou de tri multi-conditionnel complexe, Uksort () fournit un support flexible.

J'espère que l'explication de cet article peut vous aider à comprendre comment utiliser uksort () pour trier les clés dans des tableaux multidimensionnels, et faire des ajustements flexibles et utiliser en fonction de vos besoins.