首頁 >後端開發 >php教程 >在 PHP 中使用 uasort 對關聯數組進行排序時如何保持鍵順序?

在 PHP 中使用 uasort 對關聯數組進行排序時如何保持鍵順序?

Patricia Arquette
Patricia Arquette原創
2024-11-03 18:44:02201瀏覽

How Can I Maintain Key Order While Sorting Associative Arrays in PHP Using uasort?

使用uasort 維護PHP 排序中的鍵順序

使用uasort 函數對PHP 中的關聯數組進行排序時,可以強制執行即使多個鍵共享相同的值,也能保留原始鍵順序的穩定排序。

解決方案

由於PHP 預設不再支援穩定排序,因此需要自訂函數是必需的:

<code class="php">function mergesort(&$array, $cmp_function = 'strcmp') {
    // Base cases for arrays of size < 2
    if (count($array) < 2) return;
    // Split the array in half
    $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);
    // Handle case if $array1 is entirely less than $array2
    if (call_user_func($cmp_function, end($array1), $array2[0]) < 1) {
        $array = array_merge($array1, $array2);
        return;
    }
    // Merge the two sorted arrays
    $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++];
    return;
}</code>

用法

只需使用mergesort 函數對關聯數組進行排序,將其作為第一個參數傳遞,並傳遞一個用於比較值的匿名函數(可選):

<code class="php">uasort($arr, function($a, $b){
    return ($a == $b)?1:($a - $b);
});</code>

以上是在 PHP 中使用 uasort 對關聯數組進行排序時如何保持鍵順序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn