Rumah > Artikel > pembangunan bahagian belakang > Ilmu hitam pengisihan pelbagai dimensi tatasusunan PHP: mendedahkan prinsip di sebaliknya
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.
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: 🎜rrreeeAtas 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!