Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bolehkah anda Mengekalkan Susunan Utama Semasa Mengisih Tatasusunan Bersekutu dalam PHP?

Bolehkah anda Mengekalkan Susunan Utama Semasa Mengisih Tatasusunan Bersekutu dalam PHP?

Susan Sarandon
Susan Sarandonasal
2024-11-02 20:12:31115semak imbas

Can you Preserve Key Order While Sorting Associative Arrays in 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn