Ich benutze usort, um ein Array mit einem assoziativen Array innerhalb jedes Elements zu sortieren.PHP usort reorders Array der Sortierwert ist für alle gleich
Wenn alle Werte, die ich im Array sortiere, gleich sind, ändert sich die Position der Elemente im Array. Gibt es eine Möglichkeit, dies zu verhindern?
Zum Beispiel diese:
array(
array('name' => 'Ben', 'authn_weight' => 85.3),
array('name' => 'Josh', 'authn_weight' => 85.3),
array('name' => 'Fred', 'authn_weight' => 85.3)
);
Mai dazu geändert werden:
array(
array('name' => 'Josh', 'authn_weight' => 85.3),
array('name' => 'Ben', 'authn_weight' => 85.3),
array('name' => 'Fred', 'authn_weight' => 85.3)
);
Dies ist die Sortierfunktion:
private function weightSortImplementation($a, $b){
$aWeight = $a['autn_weight'];
$bWeight = $b['autn_weight'];
if ($aWeight == $bWeight) {
return 0;
}
return ($aWeight < $bWeight) ? 1 : -1;
}
ich überprüft haben, dass die weightSortImplementation
Funktion immer gibt 0 zurück und zeigt damit, dass sie gleich sind. Also warum wird das Array immer noch neu geordnet?
Das ist ein interessantes Thema. Ich habe das gerade getestet, und nach der Verwendung von 'usort' wurde die Reihenfolge umgekehrt. http://codepad.org/PRFpq8Ug –
Sie dürfen keine [stable sort] (http://en.wikipedia.org/wiki/Sorting_algorithm#Stability) verwenden, die keine Garantien über die Reihenfolge der Elemente gibt, wenn sie es sind gleich. – JoeyJ