Domanda

Ho un array di esempio:

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

e voglio ordinarlo da valori e ricordare le sue chiavi. Risultato che mi aspettavo era:

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

Così il mio primo pensiero è stato: asort! Ok, ho fatto

asort($a);

Ma no - lo ha fatto, non basta spostare 5 => 35 alla fine della matrice. Ha cambiato la mia array:

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

Si vede? Tasti con lo stesso valore sono contrario ordinati. Perché?

È stato utile?

Soluzione

Non si può pretendere un certo ordine di ordinamento per valori uguali. Dal manuale di PHP su Ordinamento Array :

  

Se una di queste funzioni di ordinamento viene valutata due membri come uguali allora l'ordine è definito (l'ordinamento non è stabile).

Altri suggerimenti

"Perché" è un'altra questione.
Ma in realtà ha fatto quello che stavi chiedendo, non è vero?
Per chiave non sono stati determinati.
Se si vuole certo ordine di chiavi, si dovrebbe affermare che nelle condizioni di esercizio

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

In breve, facendo in modo che l'ordine delle chiavi già ordinate rimane lo stesso sarebbe costato tempo di calcolo (e chi progettato la funzione in PHP deciso che non valeva la pena)

A seconda del algoritmo di ordinamento, probabilmente ha iniziato l'ordinamento in altro modo non solo rilevare che dovrebbe spostare solo quella singola coppia. Ma è finito con una serie validamente ordinato il mantenimento di chiavi / valori. hanno solo sembrano scambiati cuz avete 4 tasti con valori di 22.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top