Rumah >pembangunan bahagian belakang >tutorial php >PHP pengoptimuman prestasi menyusun tatasusunan berbilang dimensi: daripada kod ke algoritma
Pengoptimuman prestasi pengisihan tatasusunan berbilang dimensi PHP boleh dipertingkatkan melalui kedua-dua kod dan algoritma. Pengoptimuman kod termasuk menggunakan usort dan fungsi perbandingan yang ditulis sendiri untuk mengelakkan perbandingan dan salinan yang berlebihan. Pengoptimuman algoritma melibatkan algoritma pengisihan dan penggabungan cepat. Isih pantas sesuai untuk tatasusunan besar, manakala isihan cantum sesuai untuk sebarang jenis data. Contoh kod menunjukkan cara mengisih tatasusunan dengan elemen kanak-kanak menggunakan kedua-dua algoritma ini, mengisih pantas mengikut id dan menggabungkan isihan mengikut nama. . Walau bagaimanapun, isu prestasi timbul apabila anda perlu mengisih tatasusunan berbilang dimensi. Artikel ini akan meneroka pengoptimuman prestasi pengisihan tatasusunan berbilang dimensi dalam PHP dan menyediakan penyelesaian daripada kedua-dua aspek kod dan algoritma.
Pengoptimuman kod
Gunakan
Berbanding dengan fungsi sort
terbina dalam, usort fungsi kod> Mempunyai fleksibiliti yang lebih besar kerana ia membolehkan anda menggunakan fungsi perbandingan tersuai untuk mengisih elemen tatasusunan. Fungsi perbandingan yang ditulis sendiri boleh disesuaikan untuk keperluan pengisihan khusus anda, menjadikan pengisihan lebih cekap.
<?php function compare($a, $b) { return $a['key'] <=> $b['key']; } usort($array, 'compare');
Elakkan perbandingan dan penyalinan yang berlebihan
Semasa proses pengisihan, elemen tatasusunan akan dibandingkan dan disalin berulang kali. Prestasi boleh dipertingkatkan dengan mengurangkan bilangan perbandingan dan salinan yang tidak perlu. Petua berikut boleh membantu anda mengelakkan operasi ini:
Gunakan isihan gabungan: usort
和自写比较函数
相比于内置的 sort
函数,usort
Isih gabung ialah algoritma bahagi dan takluk yang mengurangkan bilangan perbandingan yang tidak perlu.
Cipta salinan untuk diisih: Isih salinan tatasusunan untuk mengelak mengubah suai tatasusunan asal.
<?php function quickSort($array) { if (count($array) <= 1) { return $array; } $pivot = $array[0]; $left = array_filter($array, function ($item) use ($pivot) { return $item < $pivot; }); $right = array_filter($array, function ($item) use ($pivot) { return $item >= $pivot; }); return array_merge(quickSort($left), [$pivot], quickSort($right)); }
Gunakan pengisihan gabungan:
Isih gabungan juga merupakan algoritma pengisihan yang cekap yang berfungsi pada sebarang jenis data. Ia berfungsi dengan membahagikan tatasusunan secara rekursif kepada bahagian yang lebih kecil, menyusun bahagian, dan kemudian menggabungkannya.<?php function mergeSort($array) { if (count($array) <= 1) { return $array; } $mid = intdiv(count($array), 2); $left = mergeSort(array_slice($array, 0, $mid)); $right = mergeSort(array_slice($array, $mid)); return merge($left, $right); } function merge($left, $right) { $result = []; while (count($left) > 0 && count($right) > 0) { if ($left[0] <= $right[0]) { $result[] = array_shift($left); } else { $result[] = array_shift($right); } } return array_merge($result, $left, $right); }Kes praktikal Berikut ialah kes praktikal yang menunjukkan cara menggunakan isihan pantas dan menggabungkan isihan untuk mengisih tatasusunan berbilang dimensi dengan sub-elemen:
<?php $array = [ ['id' => 1, 'name' => 'John'], ['id' => 3, 'name' => 'Alice'], ['id' => 2, 'name' => 'Bob'] ]; // 使用快速排序按 id 排序 $quickSortedArray = quickSort($array); // 使用归并排序按 name 排序 $mergeSortedArray = mergeSort($array); // 输出排序后的数组 print_r($quickSortedArray); print_r($mergeSortedArray);Output:
rreee
Atas ialah kandungan terperinci PHP pengoptimuman prestasi menyusun tatasusunan berbilang dimensi: daripada kod ke algoritma. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!