質問

アレイの例があります:

$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
);

分かりますか ?同じ値のキーは逆ソートされます。なんで ?

役に立ちましたか?

解決

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

これらのソート関数のいずれかが2人のメンバーを等しいと評価する場合、順序は未定義です(ソートは安定していません)。

他のヒント

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

http://en.wikipedia.org/wiki/sorting_algorithm#stability

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

ソートアルゴリズムに応じて、おそらくその単一のペアのみを移動するだけであることを検出する以外に別の方法でソートを開始し始めました。しかし、キー/値を維持する有効にソートされた配列で終わりました。彼らはあなたがの値を持つ4つのキーを持っているcuzのみに見えます 22.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top