ホームページ >バックエンド開発 >PHPチュートリアル >PHP で連想配列をソートするときにキーの順序を維持できますか?
PHP の uasort によるソート中にキーの順序を保持する
クエリ:
は可能ですか? PHP の組み込みソート関数を使用して、キーの元の順序を維持しながら、PHP で連想配列の値をソートしますか?
課題:
安定したソートを実現するには等しい値が初期のキー順序を保持する場合、PHP は安定した並べ替えをネイティブにサポートしていないため、カスタム 並べ替え関数を使用する必要があります。
解決策:
カスタム マージ ソート、これは O(n*log(n)) の複雑さを保証し、安定性を維持します。使用できます:
<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>
代替リソース:
有益なフォーラムのスレッドこのリンクにあります: [フォーラム スレッドのリンク]
以上がPHP で連想配列をソートするときにキーの順序を維持できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。