ホームページ >バックエンド開発 >PHPチュートリアル >PHP で連想配列をソートするときにキーの順序を維持できますか?

PHP で連想配列をソートするときにキーの順序を維持できますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-02 20:12:31195ブラウズ

Can you Preserve Key Order While Sorting Associative Arrays in 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。