Pregunta

I tiene una matriz ejemplo:

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

y quiero resolverlo por valores y recordar sus claves. Resultado que yo esperaba era:

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

Así que mi primer pensamiento fue: asort! Ok, lo hice

asort($a);

Pero no - que no sólo se mueven 5 => 35 al final de la matriz. Me cambió la matriz a:

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

Ves? Claves con el mismo valor están ordenados inversa. ¿Por qué?

¿Fue útil?

Solución

No se puede esperar un cierto orden de clasificación de valores iguales. Desde el href="http://www.php.net/manual/en/array.sorting.php" rel="nofollow noreferrer"> manual de PHP en :

  

Si cualquiera de estas funciones de clasificación evalúa dos miembros como iguales, entonces la orden es indefinido (la clasificación no es estable).

Otros consejos

"¿Por qué" es otra cuestión.
Pero lo que realmente hizo lo que estaba pidiendo, ¿verdad?
Para clave no se determinaron.
Si quieres cierto orden de teclas, usted debe indicar que en las condiciones de ejercicio

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

En resumen, asegurándose de que el orden de las teclas ya ordenados sigue siendo el mismo costaría tiempo de cálculo (y el que diseñó la función en PHP decidió que no valía la pena)

Dependiendo del algoritmo de ordenación, que probablemente se inició la clasificación de otra manera que sólo detectar que sólo debe mover ese solo par. Pero terminó con una matriz válidamente ordenado mantener las llaves / valores. sólo buscan intercambiado primo que tiene 4 teclas con los valores de 22.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top