Maison > développement back-end > tutoriel php > Les fonctions de tri intégrées de PHP peuvent-elles préserver l'ordre des clés lors du tri de tableaux associatifs avec des valeurs égales ?

Les fonctions de tri intégrées de PHP peuvent-elles préserver l'ordre des clés lors du tri de tableaux associatifs avec des valeurs égales ?

Mary-Kate Olsen
Libérer: 2024-11-04 07:14:30
original
730 Les gens l'ont consulté

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

Préserver l'ordre des clés dans le tri PHP

Question :

Pouvons-nous trier un tableau associatif en PHP, en préservant l'ordre des clés d'origine lorsque les valeurs sont égales, en utilisant des fonctions de tri intégrées ?

Contexte :

Les fonctions de tri de PHP telles que uasort n'offrent pas de fonctionnalités stables tri, ce qui signifie que l'ordre des éléments avec des valeurs égales peut changer après le tri.

Réponse :

Malheureusement, PHP ne prend pas officiellement en charge le tri stable après la version 4.1.0. Par conséquent, l'implémentation d'une fonction personnalisée est nécessaire pour y parvenir.

Fonction personnalisée :

Une solution consiste à implémenter une fonction de tri par fusion, qui garantit O(n*log (n)) complexité et maintient l'ordre des clés. Voici un exemple de fonction de tri par fusion (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>
Copier après la connexion

En utilisant cette fonction, vous pouvez trier votre tableau associatif tout en conservant l'ordre des clés d'origine pour les éléments de valeurs égales.

Ressources supplémentaires :

  • Thème du forum de tri stable PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal