Beibehalten der Schlüsselreihenfolge in der PHP-Sortierung mit uasort
Beim Sortieren eines assoziativen Arrays in PHP mithilfe der uasort-Funktion ist es möglich, eine zu erzwingen Stabile Sortierung, die die ursprüngliche Schlüsselreihenfolge beibehält, auch wenn mehrere Schlüssel denselben Wert haben.
Lösung
Da PHP standardmäßig keine stabile Sortierung mehr unterstützt, eine benutzerdefinierte Funktion ist erforderlich:
<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>
Verwendung
Verwenden Sie einfach die Funktion mergesort, um Ihr assoziatives Array zu sortieren, indem Sie es als erstes Argument und eine anonyme Funktion zum Vergleichen von Werten übergeben ( optional):
<code class="php">uasort($arr, function($a, $b){ return ($a == $b)?1:($a - $b); });</code>
Das obige ist der detaillierte Inhalt vonWie kann ich die Schlüsselreihenfolge beim Sortieren assoziativer Arrays in PHP mit uasort beibehalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!