Sto usando usort per ordinare un array con un array associativo all'interno di ciascun elemento.PHP usort riordina array il valore di ordinamento è lo stesso per tutti
Quando tutti i valori che sto ordinando nell'array sono uguali allora cambia ancora la posizione degli elementi nella matrice, c'è un modo per impedirlo?
Per esempio, questo:
array(
array('name' => 'Ben', 'authn_weight' => 85.3),
array('name' => 'Josh', 'authn_weight' => 85.3),
array('name' => 'Fred', 'authn_weight' => 85.3)
);
può essere modificato a questo:
array(
array('name' => 'Josh', 'authn_weight' => 85.3),
array('name' => 'Ben', 'authn_weight' => 85.3),
array('name' => 'Fred', 'authn_weight' => 85.3)
);
Questa è la funzione di ordinamento:
private function weightSortImplementation($a, $b){
$aWeight = $a['autn_weight'];
$bWeight = $b['autn_weight'];
if ($aWeight == $bWeight) {
return 0;
}
return ($aWeight < $bWeight) ? 1 : -1;
}
Ho verificato che la funzione weightSortImplementation
è sempre restituendo 0 mostrando che sono uguali. Quindi, perché questo è ancora riordinando la matrice?
Questo è un problema interessante. Ho appena provato questo, e dopo aver usato 'usort' l'ordine è stato invertito. http://codepad.org/PRFpq8Ug –
Non devono usare un [ordinamento stabile] (http://en.wikipedia.org/wiki/Sorting_algorithm#Stability), che non fornisce garanzie sull'ordine degli elementi se sono pari. – JoeyJ