Assoziative Arrays in PHP speichern Schlüssel-Wert-Paare. Beim Sortieren solcher Arrays mithilfe der in PHP integrierten Sortierfunktionen ist es wichtig zu überlegen, ob die ursprüngliche Schlüsselreihenfolge beibehalten werden soll oder nicht. In diesem Artikel untersuchen wir das aktuelle Verhalten der Sortierung in PHP und stellen eine benutzerdefinierte Lösung zur Beibehaltung der Schlüsselreihenfolge bereit.
In PHP-Versionen vor 4.1.0 Die Sortierfunktionen wie asort() und uasort() sorgten für eine stabile Sortierung. Das bedeutet, dass die Reihenfolge dieser Schlüssel im sortierten Ergebnis erhalten bleibt, wenn mehrere Schlüssel denselben Wert haben. Ab PHP 4.1.0 ist die Stabilität jedoch nicht mehr garantiert.
Da die integrierten Sortierfunktionen von PHP keine stabile Sortierung unterstützen, müssen wir unsere eigene implementieren . Der Merge-Sort-Algorithmus wird aufgrund seiner garantierten O(n*log(n))-Zeitkomplexität häufig für diesen Zweck verwendet:
<code class="php">function mergesort(&$array, $cmp_function = 'strcmp') { ... // Logic for splitting, merging, and sorting the array ... }</code>
Diese benutzerdefinierte Funktion kann mit uasort() verwendet werden, um das assoziative Array zu sortieren unter Beibehaltung der ursprünglichen Schlüsselreihenfolge:
<code class="php">uasort($arr, function($a, $b) { return mergesort([$a, $b]); });</code>
<code class="php">$arr = [ 'key-1' => 10, 'key-2' => 20, 'key-3' => 10, 'key-4' => 30, ]; uasort($arr, function($a, $b) { return mergesort([$a, $b]); }); print_r($arr);</code>
Ausgabe:
Array ( [key-1] => 10 [key-3] => 10 [key-2] => 20 [key-4] => 30 )
Durch die Verwendung der benutzerdefinierten stabilen Sortierfunktion bleibt die Schlüsselreihenfolge des ursprünglichen Arrays in der sortierten Ausgabe erhalten.
Das obige ist der detaillierte Inhalt vonWie behalte ich die Schlüsselreihenfolge beim Sortieren assoziativer Arrays in PHP bei?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!