Rumah > Artikel > pembangunan bahagian belakang > Bolehkah fungsi pengisihan terbina dalam PHP mengekalkan susunan kunci apabila menyusun tatasusunan bersekutu dengan nilai yang sama?
Memelihara Susunan Utama dalam Pengisihan PHP
Soalan:
Bolehkah kita mengisih tatasusunan bersekutu dalam PHP, mengekalkan susunan kunci asal apabila nilai adalah sama, menggunakan fungsi pengisihan terbina dalam?
Latar Belakang:
Fungsi isihan PHP seperti uasort tidak menawarkan stabil pengisihan, bermakna susunan elemen dengan nilai yang sama mungkin berubah selepas pengisihan.
Jawapan:
Malangnya, PHP tidak menyokong pengisihan stabil secara rasmi selepas versi 4.1.0. Oleh itu, melaksanakan fungsi tersuai adalah perlu untuk mencapai ini.
Fungsi Tersuai:
Satu penyelesaian ialah melaksanakan fungsi isihan gabungan, yang menjamin O(n*log (n)) kerumitan dan mengekalkan susunan utama. Berikut ialah contoh fungsi isihan gabungan (mergesort):
<code class="php">function mergesort(&$array, $cmp_function = 'strcmp') { // Handle small arrays if (count($array) < 2) return; // Split the array into two parts $halfway = count($array) / 2; $array1 = array_slice($array, 0, $halfway); $array2 = array_slice($array, $halfway); // Recursively sort the two halves mergesort($array1, $cmp_function); mergesort($array2, $cmp_function); // Merge the sorted halves into the original array $array = array(); $ptr1 = $ptr2 = 0; while ($ptr1 < count($array1) && $ptr2 < count($array2)) { if (call_user_func($cmp_function, $array1[$ptr1], $array2[$ptr2]) < 1) { $array[] = $array1[$ptr1++]; } else { $array[] = $array2[$ptr2++]; } } // Merge the remainder while ($ptr1 < count($array1)) $array[] = $array1[$ptr1++]; while ($ptr2 < count($array2)) $array[] = $array2[$ptr2++]; }</code>
Dengan menggunakan fungsi ini, anda boleh mengisih tatasusunan bersekutu anda sambil mengekalkan susunan kunci asal untuk elemen dengan nilai yang sama.
Sumber Tambahan:
Atas ialah kandungan terperinci Bolehkah fungsi pengisihan terbina dalam PHP mengekalkan susunan kunci apabila menyusun tatasusunan bersekutu dengan nilai yang sama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!