Rumah > Artikel > pembangunan bahagian belakang > Bolehkah anda Mengekalkan Susunan Utama Semasa Mengisih Tatasusunan Bersekutu dalam PHP?
Memelihara Susunan Utama Semasa Isih dengan uasor PHP
Pertanyaan:
Adakah mungkin untuk mengisih nilai tatasusunan bersekutu dalam PHP sambil mengekalkan susunan kunci asal, menggunakan fungsi pengisihan terbina dalam PHP?
Cabaran:
Untuk mencapai isihan yang stabil apabila nilai yang sama mengekalkan susunan kunci awalnya, fungsi pengisihan tersuai mesti digunakan memandangkan PHP tidak menyokong pengisihan stabil secara asli.
Penyelesaian:
Isih cantuman tersuai, yang menjamin kerumitan O(n*log(n)) dan mengekalkan kestabilan, boleh digunakan:
<code class="php">function mergesort(&$array, $cmp_function = 'strcmp') { // Handle base cases if (count($array) < 2) return; // Split the array into halves $halfway = count($array) / 2; $array1 = array_slice($array, 0, $halfway); $array2 = array_slice($array, $halfway); // Recursively sort the halves mergesort($array1, $cmp_function); mergesort($array2, $cmp_function); // Merge the sorted halves $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 remaining elements while ($ptr1 < count($array1)) $array[] = $array1[$ptr1++]; while ($ptr2 < count($array2)) $array[] = $array2[$ptr2++]; }</code>
Sumber Alternatif:
Sumber forum bermaklumat boleh ditemui di pautan ini: [Pautan Benang Forum]
Atas ialah kandungan terperinci Bolehkah anda Mengekalkan Susunan Utama Semasa Mengisih Tatasusunan Bersekutu dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!