Heim  >  Artikel  >  Backend-Entwicklung  >  Die schwarze Magie der mehrdimensionalen Sortierung von PHP-Arrays: Enthüllung der Prinzipien dahinter

Die schwarze Magie der mehrdimensionalen Sortierung von PHP-Arrays: Enthüllung der Prinzipien dahinter

WBOY
WBOYOriginal
2024-04-29 15:33:02745Durchsuche

PHP mehrdimensionale Array-Sortierung schwarze Magie: Verwenden Sie die benutzerdefinierte Funktion „compare_students“, um nach Name und Noten zu sortieren. Die Sortierung erfolgt über die Funktion usort(). UAC in PHP 7.4 bietet eine sauberere Möglichkeit, anonyme Klassen zu implementieren. Die benutzerdefinierte Funktion vergleicht Eingabearrays und sortiert nach Namen in aufsteigender Reihenfolge und nach Grad in absteigender Reihenfolge.

Die schwarze Magie der mehrdimensionalen Sortierung von PHP-Arrays: Enthüllung der Prinzipien dahinter

Die schwarze Magie der mehrdimensionalen Sortierung von PHP-Arrays: Enthüllung des Prinzips

In PHP ist die mehrdimensionale Sortierung von Arrays eine scheinbar komplexe Aufgabe. Wenn Sie jedoch die richtigen Techniken beherrschen und die dahinter stehenden Prinzipien verstehen, können Sie diese dunkle Magie mit Leichtigkeit meistern.

Praktischer Fall

Angenommen, wir haben ein Array mit Schülerdaten und möchten das Array nach Nachnamen und Klasse sortieren.

$students = [
    ['name' => 'Alice', 'score' => 90],
    ['name' => 'Bob', 'score' => 85],
    ['name' => 'Charlie', 'score' => 95],
    ['name' => 'Dave', 'score' => 80],
];

Sortierung basierend auf benutzerdefinierter Funktion

Wir können die benutzerdefinierte Funktion compare_students verwenden, um zwei Schülerdatensätze zu vergleichen und nach Nachname und Note zu sortieren: compare_students 来比较两个学生记录,实现按姓氏和成绩排序:

function compare_students($a, $b) {
    if ($a['name'] == $b['name']) {
        return $a['score'] <=> $b['score'];
    }
    return strcmp($a['name'], $b['name']);
}

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

usort($students, 'compare_students');

基于 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']);
});

原理揭秘

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

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

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

实战应用

现在,当输出 $students

print_r($students);

Dann verwenden Sie usort () Die Funktion sortiert das Array:

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
        )

)

🎜Basierend auf UAC🎜🎜🎜PHP 7.4 führte benutzerdefinierte anonyme Klassen (UAC) ein, die uns eine weitere prägnantere Implementierung bietet: 🎜rrreee 🎜🎜Prinzip enthüllt🎜🎜🎜The Die benutzerdefinierte Funktion compare_students ist eine Rückruffunktion, die auf den Werten der beiden Eingabearrays $a und $b vergleicht ihre Bestellung. 🎜🎜Die Funktion prüft zunächst, ob zwei Schüler den gleichen Namen haben. Wenn ja, werden ihre Noten verglichen, um sie in absteigender Reihenfolge zu sortieren. 🎜🎜Wenn nicht, werden die Namen der Schüler mithilfe der Funktion strcmp() verglichen, um sie in aufsteigender Reihenfolge zu sortieren. 🎜🎜🎜Praktische Anwendung🎜🎜🎜Wenn wir nun das Array $students ausgeben, erhalten wir die Ergebnisse sortiert nach Nachname und Note: 🎜rrreee🎜Ausgabeergebnisse: 🎜rrreee

Das obige ist der detaillierte Inhalt vonDie schwarze Magie der mehrdimensionalen Sortierung von PHP-Arrays: Enthüllung der Prinzipien dahinter. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn