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

PHP で連想配列をソートするときにキーの順序を維持するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-02 19:31:02960ブラウズ

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 中国語 Web サイトの他の関連記事を参照してください。

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