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

在 PHP 中對關聯數組進行排序時如何保留鍵順序?

Barbara Streisand
發布: 2024-11-02 19:31:02
原創
959 人瀏覽過

How to Preserve Key Order When Sorting Associative Arrays in PHP?

在 PHP 中對關聯數組進行排序時保留鍵順序

PHP 中的關聯數組儲存鍵值對。當使用 PHP 的內建排序函數對此類數組進行排序時,重要的是要考慮是否保留原始鍵順序。在本文中,我們將探討 PHP 中目前的排序行為,並提供保留鍵順序的自訂解決方案。

PHP 的排序函數和穩定性

在 4.1.0 之前的 PHP 版本中,排序函數,例如 asort() 和 uasort(),提供了穩定的排序。這意味著當多個鍵具有相同的值時,這些鍵的順序將保留在排序結果中。不過從 PHP 4.1.0 開始,穩定性就不再保證。

自訂穩定排序函數

由於 PHP 內建的排序函數不支援穩定排序,所以需要我們自己實作。合併排序演算法通常用於此目的,因為它保證 O(n*log(n)) 時間複雜度:

<code class="php">function mergesort(&$array, $cmp_function = 'strcmp') {
    ...
    // Logic for splitting, merging, and sorting the array
    ...
}</code>
登入後複製

此自訂函數可以與 uasort()一起使用來對關聯數組進行排序同時保留原始鍵順序:

<code class="php">uasort($arr, function($a, $b) {
    return mergesort([$a, $b]);
});</code>
登入後複製

示例用法

<code class="php">$arr = [
    'key-1' => 10,
    'key-2' => 20,
    'key-3' => 10,
    'key-4' => 30,
];

uasort($arr, function($a, $b) {
    return mergesort([$a, $b]);
});

print_r($arr);</code>
登入後複製

輸出:

Array
(
    [key-1] => 10
    [key-3] => 10
    [key-2] => 20
    [key-4] => 30
)
登入後複製

透過使用自訂穩定排序函數,原始數組的鍵順序保留在排序輸出中。

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板