Maison  >  Article  >  développement back-end  >  Tri stable des tableaux PHP : maintenir l'ordre des éléments égaux

Tri stable des tableaux PHP : maintenir l'ordre des éléments égaux

WBOY
WBOYoriginal
2024-04-26 15:15:01457parcourir

Un tri stable des tableaux PHP peut être obtenu en : créant un comparateur personnalisé qui prend en compte l'index d'origine lors de la comparaison ; en utilisant la fonction uasort() pour trier les valeurs en fonction de la clé et en définissant la valeur sur l'élément contenant l'index d'origine. ; ces méthodes garantissent que les éléments égaux sont dans le même ordre de tri que dans leur ordre d'origine.

PHP 数组稳定排序:保持相等元素的顺序

Tri stable des tableaux PHP : maintenir l'ordre des éléments égaux

Introduction

Le tri stable garantit que l'ordre des éléments égaux après le tri est le même que l'ordre d'origine. Pour un tri stable, les comparaisons suivantes sont valides :

a == b => sort(a) <= sort(b)

Les fonctions natives sort() et rsort() du tableau PHP sont instables. Cet article explorera les méthodes de tri stable. sort()rsort() 函数是不稳定的。本篇文章将探究稳定排序的方法。

方法

1. 自定义比较器

使用自定义比较器,在相等元素时比较它们的原始索引:

function cmp($a, $b) {
    if ($a == $b) {
        return 0;
    }
    return $a < $b ? -1 : 1;
}

然后在 usort()uksort() 函数中使用它:

usort($arr, 'cmp');

2. 使用 uasort()

uasort() 根据键对值进行排序,ksort()

Méthode

1. Comparateur personnalisé

Utilisez un comparateur personnalisé pour comparer les indices originaux des éléments lorsqu'ils sont égaux :

$indices = array_keys($arr);
uasort($arr, function($a, $b) use ($indices) {
    if ($a == $b) {
        return 0;
    }
    return $indices[array_search($a, $arr)] < $indices[array_search($b, $arr)] ? -1 : 1;
});
Puis dans usort() ou uksort() :
$scores = [
    'John' => 90,
    'Mary' => 85,
    'Bob' => 85,
    'Alice' => 95
];

uasort($scores, function($a, $b) {
    if ($a == $b) {
        return 0;
    }
    return $a < $b ? -1 : 1;
});

print_r($scores);

2. Utilisez uasort()

🎜🎜uasort() pour trier les valeurs en fonction des clés. , ksort() trie les clés. Vous pouvez donc définir la valeur du tableau sur un élément contenant l'index d'origine, puis trier les clés : 🎜
Array
(
    [Alice] => 95
    [John] => 90
    [Bob] => 85
    [Mary] => 85
)
🎜🎜 Exemple pratique 🎜🎜🎜 Trier un tableau de notes d'élèves par score tout en conservant l'ordre d'origine des élèves ayant le même score :🎜rrreee🎜Sortie:🎜rrreee🎜🎜Conclusion🎜🎜🎜Les méthodes répertoriées ci-dessus peuvent réaliser un tri stable des tableaux PHP afin que l'ordre des éléments égaux soit maintenu. 🎜

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!

Déclaration:
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