Maintenir l'ordre des clés dans le tri PHP avec uasort
Lors du tri d'un tableau associatif en PHP à l'aide de la fonction uasort, il est possible d'appliquer un tri stable qui préserve l'ordre des clés d'origine, même si plusieurs clés partagent la même valeur.
Solution
Puisque PHP ne prend plus en charge le tri stable par défaut, une fonction personnalisée est requis :
<code class="php">function mergesort(&$array, $cmp_function = 'strcmp') { // Base cases for arrays of size < 2 if (count($array) < 2) return; // Split the array in half $halfway = count($array) / 2; $array1 = array_slice($array, 0, $halfway); $array2 = array_slice($array, $halfway); // Recursively sort the halves mergesort($array1, $cmp_function); mergesort($array2, $cmp_function); // Handle case if $array1 is entirely less than $array2 if (call_user_func($cmp_function, end($array1), $array2[0]) < 1) { $array = array_merge($array1, $array2); return; } // Merge the two sorted arrays $array = array(); $ptr1 = $ptr2 = 0; while ($ptr1 < count($array1) && $ptr2 < count($array2)) { if (call_user_func($cmp_function, $array1[$ptr1], $array2[$ptr2]) < 1) { $array[] = $array1[$ptr1++]; } else { $array[] = $array2[$ptr2++]; } } // Merge the remainder while ($ptr1 < count($array1)) $array[] = $array1[$ptr1++]; while ($ptr2 < count($array2)) $array[] = $array2[$ptr2++]; return; }</code>
Utilisation
Utilisez simplement la fonction mergesort pour trier votre tableau associatif, en le passant comme premier argument et une fonction anonyme pour comparer les valeurs ( facultatif) :
<code class="php">uasort($arr, function($a, $b){ return ($a == $b)?1:($a - $b); });</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!