Rumah > Artikel > pembangunan bahagian belakang > Rhapsody Isih Berbilang Dimensi Tatasusunan PHP: Kuasai Teknik Isih Lanjutan
Menggunakan fungsi terbina dalam PHP dan pembanding tersuai, pengisihan tatasusunan berbilang dimensi boleh dilakukan dengan cara berikut: 1. sort(): Isih mengikut nilai pertama. 2. usort(): Isih menggunakan fungsi perbandingan tersuai. 3. Pembanding tersuai: laksanakan antara muka Pembanding untuk pengisihan kompleks. 4. Pembanding kompaun: menggabungkan berbilang pembanding untuk mencapai pengisihan berbilang medan. Sesuai untuk senario praktikal, seperti menyusun katalog produk mengikut harga.
Isihan tatasusunan ialah tugas biasa dalam PHP, tetapi ia boleh menjadi rumit apabila berurusan dengan tatasusunan berbilang dimensi. Artikel ini akan memperkenalkan secara ringkas dan mendalam cara menggunakan fungsi terbina dalam PHP dan pembanding tersuai untuk mencapai pengisihan lanjutan tatasusunan berbilang dimensi.
sort()
基本的多维数组排序可以使用 sort()
函数。它默认按数组中的第一个值排序,例如:
$multiArray = [ ['name' => 'John', 'age' => 30], ['name' => 'Jane', 'age' => 25], ]; sort($multiArray); // 结果:[ // ['name' => 'Jane', 'age' => 25], // ['name' => 'John', 'age' => 30], // ]
usort()
usort()
函数允许使用自定义比较函数来排序数组。我们可以定义一个比较回调函数,根据特定字段(例如 age
)进行比较,例如:
usort($multiArray, function($a, $b) { return $a['age'] <=> $b['age']; }); // 结果:[ // ['name' => 'Jane', 'age' => 25], // ['name' => 'John', 'age' => 30], // ]
自定义比较器更灵活,可以根据需要执行更复杂的排序。为此,我们可以创建一个实现 Comparator
接口的类,如下所示:
class AgeComparator implements Comparator { public function compare($a, $b) { return $a['age'] <=> $b['age']; } }
然后,我们可以使用此比较器对数组排序:
usort($multiArray, new AgeComparator()); // 结果:[ // ['name' => 'Jane', 'age' => 25], // ['name' => 'John', 'age' => 30], // ]
要根据多个字段排序,我们可以使用一个复合比较器,它将多个比较器的结果组合起来。例如,要按年龄排序,然后再按名称排序,可以使用以下复合比较器:
class MultiFieldComparator implements Comparator { private $comparators = []; public function __construct(array $comparators) { $this->comparators = $comparators; } public function compare($a, $b) { foreach ($this->comparators as $comparator) { $result = $comparator->compare($a, $b); if ($result !== 0) { return $result; } } return 0; } }
然后,我们可以使用这个比较器对数组排序:
$multiFieldComparator = new MultiFieldComparator([ new AgeComparator(), new NameComparator(), ]); usort($multiArray, $multiFieldComparator); // 结果:[ // ['name' => 'Jane', 'age' => 25], // ['name' => 'John', 'age' => 30], // ]
实战案例:对商品目录进行排序
假设我们有一个电子商务应用程序,需要根据价格从低到高对商品进行排序。商品目录是一个多维数组,其中包含商品信息,如名稱、價格和數量:
$products = [ ['name' => 'Product A', 'price' => 10], ['name' => 'Product B', 'price' => 15], ['name' => 'Product C', 'price' => 5], ];
要对商品按價格由低到高排序,我们可以使用以下代码:
usort($products, function($a, $b) { return $a['price'] <=> $b['price']; });
执行此代码后,$products
Isihan tatasusunan berbilang dimensi asas boleh menggunakan fungsi sort()
. Ia mengisih mengikut nilai pertama dalam tatasusunan secara lalai, contohnya:
usort()
🎜usort()
Fungsi ini membenarkan penggunaan tersuai fungsi perbandingan untuk Susun tatasusunan. Kita boleh mentakrifkan fungsi panggil balik perbandingan untuk membandingkan berdasarkan medan tertentu (seperti Comparator
seperti berikut: 🎜rrreee🎜 Kemudian, kita boleh menggunakan komparator ini untuk mengisih tatasusunan: 🎜rrreee🎜Isih berbilang medan 🎜🎜untuk diisih berdasarkan Untuk mengisih berbilang medan, kita boleh menggunakan pembanding kompaun yang menggabungkan hasil pembanding berbilang. Contohnya, untuk mengisih mengikut umur dan kemudian mengikut nama, kita boleh menggunakan pembanding kompaun berikut: 🎜rrreee🎜 Kita kemudian boleh menggunakan pembanding ini untuk mengisih tatasusunan: 🎜rrreee🎜Contoh Praktikal: Menyusun Katalog Produk🎜🎜 Katakan kita mempunyai aplikasi e-dagang di mana kita perlu menyusun item berdasarkan harga dari rendah ke tinggi. Katalog produk ialah tatasusunan berbilang dimensi yang mengandungi maklumat produk seperti nama, harga dan kuantiti: 🎜rrreee🎜 Untuk mengisih produk mengikut harga dari rendah ke tinggi, kita boleh menggunakan kod berikut: 🎜rrreee🎜Selepas melaksanakan kod ini, Tatasusunan $products
akan diisih mengikut harga dari kecil ke besar. 🎜Atas ialah kandungan terperinci Rhapsody Isih Berbilang Dimensi Tatasusunan PHP: Kuasai Teknik Isih Lanjutan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!