Maison > développement back-end > tutoriel php > La magie noire du tri multidimensionnel des tableaux PHP : révéler les principes qui la sous-tendent

La magie noire du tri multidimensionnel des tableaux PHP : révéler les principes qui la sous-tendent

WBOY
Libérer: 2024-04-29 15:33:02
original
791 Les gens l'ont consulté

Magie noire de tri de tableau multidimensionnel PHP : utilisez la fonction personnalisée compare_students pour trier en fonction du nom et des notes. Le tri est effectué via la fonction usort(). L'UAC dans PHP 7.4 fournit un moyen plus propre d'implémenter des classes anonymes. La fonction personnalisée compare les tableaux d'entrée et trie par nom par ordre croissant et par note par ordre décroissant.

La magie noire du tri multidimensionnel des tableaux PHP : révéler les principes qui la sous-tendent

La magie noire du tri multidimensionnel des tableaux PHP : révéler le principe

En PHP, le tri multidimensionnel des tableaux est une tâche apparemment complexe. Cependant, maîtriser les techniques appropriées et comprendre les principes qui les sous-tendent peut vous permettre de maîtriser facilement cette magie noire.

Cas pratique

Supposons que nous ayons un tableau contenant des données sur les élèves et que nous souhaitions trier le tableau par nom de famille et par note.

$students = [
    ['name' => 'Alice', 'score' => 90],
    ['name' => 'Bob', 'score' => 85],
    ['name' => 'Charlie', 'score' => 95],
    ['name' => 'Dave', 'score' => 80],
];
Copier après la connexion

Tri basé sur une fonction personnalisée

Nous pouvons utiliser la fonction personnalisée compare_students pour comparer deux dossiers d'élèves afin de trier par nom de famille et note : compare_students 来比较两个学生记录,实现按姓氏和成绩排序:

function compare_students($a, $b) {
    if ($a['name'] == $b['name']) {
        return $a['score'] <=> $b['score'];
    }
    return strcmp($a['name'], $b['name']);
}
Copier après la connexion

然后使用 usort() 函数对数组进行排序:

usort($students, 'compare_students');
Copier après la connexion

基于 UAC

PHP 7.4 引入了用户定义的匿名类 (UAC),这为我们提供了另一种更简洁的实现方式:

uasort($students, function($a, $b) {
    if ($a['name'] == $b['name']) {
        return $a['score'] <=> $b['score'];
    }
    return strcmp($a['name'], $b['name']);
});
Copier après la connexion

原理揭秘

自定义函数 compare_students 是一个回调函数,它根据两个输入数组 $a$b 的值比较它们的顺序。

该函数首先检查两个学生是否具有相同的姓名。如果是,它将比较他们的成绩,以便按成绩递减排序。

如果不是,它将使用 strcmp() 函数比较学生的姓名,以便按升序排序。

实战应用

现在,当输出 $students

print_r($students);
Copier après la connexion

Ensuite, utilisez usort () trie le tableau :

Array
(
    [0] => Array
        (
            [name] => Alice
            [score] => 90
        )

    [1] => Array
        (
            [name] => Bob
            [score] => 85
        )

    [2] => Array
        (
            [name] => Charlie
            [score] => 95
        )

    [3] => Array
        (
            [name] => Dave
            [score] => 80
        )

)
Copier après la connexion
🎜Basé sur UAC🎜🎜🎜PHP 7.4 a introduit les classes anonymes définies par l'utilisateur (UAC), qui nous fournissent une autre implémentation plus concise : 🎜rrreee 🎜🎜Principe révélé🎜🎜🎜Le la fonction personnalisée compare_students est une fonction de rappel basée sur les valeurs des deux tableaux d'entrée $a et $b Comparez leur commande. 🎜🎜La fonction vérifie d'abord si deux étudiants portent le même nom. Si tel est le cas, il comparera leurs notes afin de les trier par ordre décroissant. 🎜🎜Sinon, il utilisera la fonction strcmp() pour comparer les noms des élèves afin de les trier par ordre croissant. 🎜🎜🎜Application pratique🎜🎜🎜Maintenant, lors de la sortie du tableau $students, nous obtiendrons les résultats triés par nom de famille et note : 🎜rrreee🎜Résultats de sortie : 🎜rrreee

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal