Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Ilmu hitam pengisihan pelbagai dimensi tatasusunan PHP: mendedahkan prinsip di sebaliknya

Ilmu hitam pengisihan pelbagai dimensi tatasusunan PHP: mendedahkan prinsip di sebaliknya

WBOY
WBOYasal
2024-04-29 15:33:02745semak imbas

PHP pelbagai dimensi menyusun ilmu hitam: gunakan fungsi tersuai compare_students untuk mengisih berdasarkan nama dan gred. Pengisihan dilakukan melalui fungsi usort(). UAC dalam PHP 7.4 menyediakan cara yang lebih bersih untuk melaksanakan kelas tanpa nama. Fungsi tersuai membandingkan tatasusunan input dan mengisih mengikut nama dalam tertib menaik dan gred dalam tertib menurun.

Ilmu hitam pengisihan pelbagai dimensi tatasusunan PHP: mendedahkan prinsip di sebaliknya

Hitam Isih Pelbagai Dimensi Tatasusunan PHP: Mendedahkan Prinsip

Dalam PHP, pengisihan berbilang dimensi tatasusunan ialah tugas yang nampaknya rumit. Walau bagaimanapun, menguasai teknik yang betul dan memahami prinsip di sebaliknya membolehkan anda menguasai sihir gelap ini dengan mudah.

Kes Praktikal

Andaikan kami mempunyai tatasusunan yang mengandungi data pelajar dan kami ingin mengisih tatasusunan mengikut nama keluarga dan gred.

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

Isih berdasarkan fungsi tersuai

Kita boleh menggunakan fungsi tersuai compare_students untuk membandingkan dua rekod pelajar untuk mengisih mengikut nama akhir dan gred: 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);

Kemudian gunakan usort () fungsi mengisih tatasusunan:

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
        )

)

🎜Berdasarkan UAC🎜🎜🎜PHP 7.4 memperkenalkan kelas tanpa nama (UAC) yang ditakrifkan pengguna, yang memberikan kita satu lagi pelaksanaan yang lebih ringkas: 🎜rrreee 🎜🎜🎜🎜🎜🎜Prinsip Didedahkan fungsi tersuai compare_students ialah fungsi panggil balik, yang berdasarkan nilai ​​​​bagi dua tatasusunan input $a dan $b Bandingkan pesanan mereka. 🎜🎜Fungsi pertama menyemak sama ada dua pelajar mempunyai nama yang sama. Jika ya, ia akan membandingkan gred mereka untuk mengisih mereka dalam tertib menurun. 🎜🎜Jika tidak, ia akan menggunakan fungsi strcmp() untuk membandingkan nama pelajar untuk mengisih mereka dalam tertib menaik. 🎜🎜🎜Aplikasi praktikal🎜🎜🎜Sekarang, apabila mengeluarkan tatasusunan $students, kami akan mendapat keputusan disusun mengikut nama akhir dan gred: 🎜rrreee🎜Hasil keluaran: 🎜rrreee

Atas ialah kandungan terperinci Ilmu hitam pengisihan pelbagai dimensi tatasusunan PHP: mendedahkan prinsip di sebaliknya. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn