3

配列の例があります:

$a = array(
    5   => 35,
    16  => 22,
    7   => 22,
    3   => 22,
    11  => 22,
    9   => 27,
);

値でソートし、そのキーを覚えておきたいです。私が期待した結果は次のとおりです。

$a = array(
    16  => 22,
    7   => 22,
    3   => 22,
    11  => 22,
    9   => 27,
    5   => 35,
);

だから私の最初の考えは:asort!わかりました、やった

asort($a);

しかし、いいえ-5 => 35配列の最後に移動しただけではありません。それは私の配列を次のように変更しました:

$a = array(
    11  => 22,
    3   => 22,
    7   => 22,
    16  => 22,
    9   => 27,
    5   => 35
);

分かりますか ?同じ値を持つキーは逆順にソートされます。なんで ?

4

4 に答える 4

11

等しい値に対して特定の並べ替え順序を期待することはできません。Sorting Arrays に関する PHP マニュアルから:

これらの並べ替え関数のいずれかが 2 つのメンバーを等しいと評価した場合、順序は未定義です (並べ替えは安定しません)。

于 2010-09-08T10:14:05.227 に答える
2

http://en.wikipedia.org/wiki/Sorting_algorithm#Stability

要するに、すでにソートされたキーの順序が同じままであることを確認すると、計算時間がかかります(そして、PHPで関数を設計した人は、それが価値がないと判断した人は誰でも)

于 2010-09-08T11:08:57.593 に答える
2

「なぜ」は別の問題です。
しかし、それは実際にあなたが求めていたものでしたね。
キーの順序が決定されていません。
キーの特定の順序が必要な場合は、運動条件に記載する必要があります

于 2010-09-08T10:12:22.830 に答える
1

並べ替えアルゴリズムによっては、その 1 つのペアのみを移動する必要があることを検出するだけでなく、別の方法で並べ替えを開始した可能性があります。しかし、キー/値を維持する有効にソートされた配列になりました。の値を持つ4つのキーがあるため、それらは交換されているように見えます22

于 2010-09-08T10:15:19.630 に答える