Frage

Ich habe ein Beispiel-Array:

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

und ich möchte es durch die Werte sortieren und seine Schlüssel erinnern. Ergebnis, dass ich erwartet war:

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

So war mein erster Gedanke: asort! Ok, ich habe

asort($a);

Aber nein - es hat einfach nicht 5 => 35 an das Ende des Feldes bewegen. Es änderte meinen Array:

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

Sie sehen? Tasten mit dem gleichen Wert sind umgekehrt sortiert. Warum?

War es hilfreich?

Lösung

Sie können nicht eine bestimmte Sortierreihenfolge für gleiche Werte erwarten. Aus dem PHP-Handbuch auf Sorting Arrays :

Wenn eine dieser Sortierfunktionen auswertet zwei Elemente gleich anschließend die Reihenfolge nicht definiert ist (die Sortierung ist nicht stabil).

Andere Tipps

"Warum" ist eine andere Frage.
Aber es hat eigentlich das, was Sie fragen, nicht wahr?
Key Auftrag wurde nicht bestimmt.
Wenn Sie bestimmte Reihenfolge der Schlüssel möchten, sollten Sie es in den Ausübungsbedingungen angeben

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

kurz, um sicherzustellen, dass die Reihenfolge der bereits sortierten Schlüssel bleibt gleich würde die Rechenzeit kosten (und wer auch immer die Funktion in PHP entwickelt beschlossen, es war nicht wert)

Je nach Art Algorithmus, ist es wahrscheinlich begann in einer anderen Art und Weise Sortierung als nur erfaßt wird, dass es nur das einzelne Paar bewegen soll. Aber es endete mit einem rechtsgültig sortierten Array beibehalten Schlüssel / Werte auf. sie nur getauscht aussehen Cuz Sie 4 Schlüssel mit Werten von 22 haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top