Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich die Schlüsselreihenfolge beim Sortieren assoziativer Arrays in PHP mit uasort beibehalten?

Wie kann ich die Schlüsselreihenfolge beim Sortieren assoziativer Arrays in PHP mit uasort beibehalten?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-03 18:44:02127Durchsuche

How Can I Maintain Key Order While Sorting Associative Arrays in PHP Using uasort?

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!

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