Dans PHP, USORT () est une fonction très utile qui nous permet de personnaliser le tri des tableaux. Le deuxième paramètre de la fonction USORT () est une fonction de rappel (généralement une fonction de comparaison), qui détermine comment trier les éléments du tableau. Pour contrôler les règles de tri plus flexiblement, nous utilisons généralement des fonctions anonymes comme fonctions de rappel.
La fonction USORT () est utilisée pour trier les tableaux et permet aux utilisateurs de personnaliser les règles de tri. La syntaxe de base est la suivante:
<span><span><span class="hljs-title function_ invoke__">usort</span></span><span>(</span><span><span class="hljs-keyword">array</span></span><span> &</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">$callback</span></span><span>);
</span></span>
$ Array est le tableau à tri.
$ rappel est une fonction de rappel qui prend deux éléments de tableau sous forme de paramètres et renvoie une valeur pour déterminer leur commande. La fonction de rappel doit suivre les règles suivantes:
Si le premier élément est plus petit que le deuxième élément, un nombre négatif est renvoyé.
Si le premier élément est supérieur au deuxième élément, un nombre positif est renvoyé.
Si les deux éléments sont égaux, retournez 0.
Dans de nombreux cas, nous ne voulons pas définir une seule fonction pour chaque opération de tri. PHP nous permet de simplifier ce processus en utilisant des fonctions anonymes (également appelées fermetures). Les fonctions anonymes peuvent être directement utilisées comme fonctions de rappel pour USORT () sans avoir besoin de déclarer une fonction nommée séparément.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$array</span></span><span> = [</span><span><span class="hljs-number">5</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-number">9</span></span><span>, </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-number">5</span></span><span>, </span><span><span class="hljs-number">6</span></span><span>];
</span><span><span class="hljs-comment">// Tri avec des fonctions anonymes</span></span><span>
</span><span><span class="hljs-title function_ invoke__">usort</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>, function(</span><span><span class="hljs-variable">$a</span></span><span>, </span><span><span class="hljs-variable">$b</span></span><span>) {
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$a</span></span><span> - </span><span><span class="hljs-variable">$b</span></span><span>; </span><span><span class="hljs-comment">// Commande ascendante</span></span><span>
});
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Sortir:
<span><span>Array
(
[</span><span><span class="hljs-meta">0</span></span><span>] => </span><span><span class="hljs-number">1</span></span><span>
[</span><span><span class="hljs-meta">1</span></span><span>] => </span><span><span class="hljs-number">2</span></span><span>
[</span><span><span class="hljs-meta">2</span></span><span>] => </span><span><span class="hljs-number">5</span></span><span>
[</span><span><span class="hljs-meta">3</span></span><span>] => </span><span><span class="hljs-number">5</span></span><span>
[</span><span><span class="hljs-meta">4</span></span><span>] => </span><span><span class="hljs-number">6</span></span><span>
[</span><span><span class="hljs-meta">5</span></span><span>] => </span><span><span class="hljs-number">9</span></span><span>
)
</span></span>
Dans cet exemple, les paramètres $ a et $ b de la fonction anonyme sont deux éléments dans le tableau, et $ a - $ b signifie que nous voulons trier dans l'ordre croissant. Si vous souhaitez trier en commande descendant, modifiez simplement le retour $ a - $ b; pour retourner $ b - $ a; .
Supposons que nous ayons un tableau de chaînes et que nous voulions trier par la longueur de la chaîne:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$array</span></span><span> = [</span><span><span class="hljs-string">"apple"</span></span><span>, </span><span><span class="hljs-string">"banana"</span></span><span>, </span><span><span class="hljs-string">"cherry"</span></span><span>, </span><span><span class="hljs-string">"date"</span></span><span>];
</span><span><span class="hljs-comment">// Trier par longueur de chaîne</span></span><span>
</span><span><span class="hljs-title function_ invoke__">usort</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>, function(</span><span><span class="hljs-variable">$a</span></span><span>, </span><span><span class="hljs-variable">$b</span></span><span>) {
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$a</span></span><span>) - </span><span><span class="hljs-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$b</span></span><span>); </span><span><span class="hljs-comment">// 根据长度Commande ascendante</span></span><span>
});
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Sortir:
<span><span>Array
(
[</span><span><span class="hljs-meta">0</span></span><span>] => date
[</span><span><span class="hljs-meta">1</span></span><span>] => apple
[</span><span><span class="hljs-meta">2</span></span><span>] => banana
[</span><span><span class="hljs-meta">3</span></span><span>] => cherry
)
</span></span>
Dans cet exemple, strlen ($ a) - strlen ($ b) est utilisé pour trier en fonction de la longueur de la chaîne.
Supposons que nous ayons un tableau d'objets multiples et que nous voulions trier par un attribut de l'objet:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-class"><span class="hljs-keyword">class</span></span></span><span> </span><span><span class="hljs-title">Person</span></span><span> {
</span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-variable">$name</span></span><span>;
</span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-variable">$age</span></span><span>;
</span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">__construct</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$name</span></span></span><span>, </span><span><span class="hljs-variable">$age</span></span><span>) {
</span><span><span class="hljs-variable language_">$this</span></span><span>->name = </span><span><span class="hljs-variable">$name</span></span><span>;
</span><span><span class="hljs-variable language_">$this</span></span><span>->age = </span><span><span class="hljs-variable">$age</span></span><span>;
}
}
</span><span><span class="hljs-variable">$people</span></span><span> = [
</span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">Person</span></span><span>(</span><span><span class="hljs-string">"Alice"</span></span><span>, </span><span><span class="hljs-number">30</span></span><span>),
</span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">Person</span></span><span>(</span><span><span class="hljs-string">"Bob"</span></span><span>, </span><span><span class="hljs-number">25</span></span><span>),
</span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">Person</span></span><span>(</span><span><span class="hljs-string">"Charlie"</span></span><span>, </span><span><span class="hljs-number">35</span></span><span>),
];
</span><span><span class="hljs-comment">// 按年龄Commande ascendante</span></span><span>
</span><span><span class="hljs-title function_ invoke__">usort</span></span><span>(</span><span><span class="hljs-variable">$people</span></span><span>, function(</span><span><span class="hljs-variable">$a</span></span><span>, </span><span><span class="hljs-variable">$b</span></span><span>) {
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$a</span></span><span>->age - </span><span><span class="hljs-variable">$b</span></span><span>->age;
});
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$people</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$person</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$person</span></span><span>->name . </span><span><span class="hljs-string">" ("</span></span><span> . </span><span><span class="hljs-variable">$person</span></span><span>->age . </span><span><span class="hljs-string">")\n"</span></span><span>;
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Sortir:
<span><span>Bob (</span><span><span class="hljs-number">25</span></span><span>)
Alice (</span><span><span class="hljs-number">30</span></span><span>)
Charlie (</span><span><span class="hljs-number">35</span></span><span>)
</span></span>
Cet exemple montre comment utiliser des fonctions anonymes pour trier en fonction des propriétés d'un objet.
Dans PHP, la fonction USORT () est un outil très flexible. En utilisant des fonctions anonymes, nous pouvons rapidement implémenter une logique de tri personnalisée complexe. L'avantage des fonctions anonymes en tant que fonctions de rappel est qu'elles ne nécessitent pas de fonctions nommées supplémentaires, et ils peuvent définir directement les règles de tri lors de l'appel USORT () , ce qui rend le code plus concis et plus facile à entretenir.
En utilisant rationnellement les fonctions anonymes, les développeurs peuvent répondre à diverses exigences de tri de simples à complexes, ce qui rend le tri de réseau PHP plus efficace et plus flexible.