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中文網其他相關文章!