Préserver l'ordre des clés (tri stable) lors du tri avec PHP uasort

Cette question est en fait inspiré d'un autre ici et je voulais la développer un peu.

Avoir un tableau associatif en PHP il est possible de trier ses valeurs, mais où les valeurs sont égales à préserver la clé d'origine, en utilisant un (ou plusieurs) de PHP intégré dans la fonction de tri?

Voici un script que j'ai utilisé pour tester des solutions possibles (n'ai pas trouvé d'):

<?php
header('Content-type: text/plain');
for($i=0;$i<10;$i++){
    $arr['key-'.$i] = rand(1,5)*10;
}
uasort($arr, function($a, $b){
    //sort condition may go here //
    //Tried: return ($a == $b)?1:($a - $b); //
    //Tried: return $a >= $b; //
});
print_r($arr);
?>

Piège: Parce que les touches sont classés dans le tableau d'origine, s'il vous plaît ne pas être tenté de suggérer le tri par clé pour restaurer l'ordre d'origine. J'ai fait l'exemple avec eux condamnée à être plus facile de vérifier visuellement leur ordre dans la sortie.

  • En d'autres termes, la solution à cette question est un stable algorithme de tri, qu'aucun de PHP sur les algorithmes de tri sont, soi-disant.
  • Je me doutais bien que beaucoup, mais je voudrais une réponse définitive et/ou une solution de contournement possible.
  • Est-il une raison pour utiliser biult fonctions seulement ?
  • php.net/manual/en/array.sorting.php - Si l'une de ces fonctions de tri, évalue deux membres de l'égalité, l'ordre n'est pas défini (le tri n'est pas stable).
  • Tout d'abord, je voudrais savoir si c'est possible en utilisant l'un de PHP des fonctions. Deuxièmement, je voudrais voir une alternative.
  • Regardez: notmysock.org/blog/php/schwartzian-transform.html il résout mon problème.

InformationsquelleAutor Alin Purcaru | 2010-12-04