Beibehaltung der Schlüsselreihenfolge bei der PHP-Sortierung
Frage:
Können wir ein assoziatives Array sortieren? in PHP die ursprüngliche Schlüsselreihenfolge bei gleichen Werten beibehalten und integrierte Sortierfunktionen verwenden?
Hintergrund:
PHPs Sortierfunktionen wie uasort bieten keine Stabilität Sortieren, was bedeutet, dass sich die Reihenfolge von Elementen mit gleichen Werten nach dem Sortieren ändern kann.
Antwort:
Leider unterstützt PHP nach Version 4.1.0 offiziell keine stabile Sortierung mehr. Daher ist die Implementierung einer benutzerdefinierten Funktion erforderlich, um dies zu erreichen.
Benutzerdefinierte Funktion:
Eine Lösung besteht darin, eine Zusammenführungssortierungsfunktion zu implementieren, die O(n*log garantiert (n)) Komplexität und behält die Schlüsselreihenfolge bei. Hier ist ein Beispiel für eine Zusammenführungssortierfunktion (mergesort):
<code class="php">function mergesort(&$array, $cmp_function = 'strcmp') { // Handle small arrays if (count($array) < 2) return; // Split the array into two parts $halfway = count($array) / 2; $array1 = array_slice($array, 0, $halfway); $array2 = array_slice($array, $halfway); // Recursively sort the two halves mergesort($array1, $cmp_function); mergesort($array2, $cmp_function); // Merge the sorted halves into the original array $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++]; }</code>
Mit dieser Funktion können Sie Ihr assoziatives Array sortieren und dabei die ursprüngliche Schlüsselreihenfolge für Elemente mit gleichen Werten beibehalten.
Zusätzliche Ressourcen:
Das obige ist der detaillierte Inhalt vonKönnen die in PHP integrierten Sortierfunktionen die Schlüsselreihenfolge beibehalten, wenn assoziative Arrays mit gleichen Werten sortiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!