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
Mary-Kate OlsenOriginal
2024-11-04 07:14:30772Durchsuche

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>

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!

Stellungnahme:
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