Heim > Backend-Entwicklung > PHP-Tutorial > Können die in PHP integrierten Sortierfunktionen die Schlüsselreihenfolge beibehalten, wenn assoziative Arrays mit gleichen Werten sortiert werden?

Können die in PHP integrierten Sortierfunktionen die Schlüsselreihenfolge beibehalten, wenn assoziative Arrays mit gleichen Werten sortiert werden?

Mary-Kate Olsen
Freigeben: 2024-11-04 07:14:30
Original
732 Leute haben es durchsucht

Can PHP's built-in sorting functions preserve key order when sorting associative arrays with equal values?

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>
Nach dem Login kopieren

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:

  • PHP Stable Sort Forum Thread

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage