Question

J'ai un tableau exemple:

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

et je veux les trier par des valeurs et rappelez-vous ses clés. Résultat que je pensais était:

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

Donc, ma première pensée a été: asort! Ok, je l'ai fait

asort($a);

Mais pas - il ne bougeait pas juste 5 => 35 à la fin du tableau. Il a changé mon tableau à:

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

Vous voyez? Clés avec la même valeur sont triées inverse. Pourquoi?

Était-ce utile?

La solution

Vous ne pouvez pas attendre à un certain ordre de tri des valeurs égales. De manuel PHP sur le tri des tableaux :

  

Si l'une de ces fonctions de tri évalue deux membres comme égaux alors l'ordre est indéfini (le tri est pas stable).

Autres conseils

"Pourquoi" est une autre question.
Mais il a effectivement fait ce que vous demandez, ne pas
ordre de clé n'a pas été déterminée.
Si vous voulez certain ordre de clés, vous devez indiquer dans ce conditions d'exercice

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

bref, faire en sorte que l'ordre des clés déjà triées reste le même coûterait le temps de calcul (et celui qui a conçu la fonction à PHP a décidé qu'il était pas la peine)

En fonction de l'algorithme de tri, il a probablement commencé le tri d'une autre manière que de détecter qu'il ne doit se déplacer que d'une seule paire. Mais il a fini avec un tableau valablement Sorted la gestion des clés / valeurs. ils ne semblent troqué cuz vous avez 4 touches avec des valeurs de 22.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top