Maison  >  Article  >  développement back-end  >  Algorithme de fusion et de déduplication de tableaux PHP : règles personnalisées basées sur les fermetures

Algorithme de fusion et de déduplication de tableaux PHP : règles personnalisées basées sur les fermetures

WBOY
WBOYoriginal
2024-04-20 12:12:02790parcourir

Définissez des règles de comparaison personnalisées via des fermetures pour fusionner et dédupliquer les tableaux. Les fermetures acceptent deux éléments et renvoient une valeur booléenne pour indiquer que les éléments égaux seront ignorés. En parcourant le tableau et en utilisant des fermetures pour la déduplication, la fusion et la déduplication des tableaux avec des règles personnalisées sont enfin mises en œuvre.

PHP 数组合并去重算法:基于闭包的自定义规则

Algorithme de fusion et de déduplication de tableaux PHP : règles personnalisées basées sur des fermetures

Dans le développement PHP, nous avons souvent besoin de fusionner des tableaux et de les dédupliquer. Cependant, la fonction par défaut array_merge() ne peut pas satisfaire tous les scénarios, notamment lorsque les éléments fusionnés doivent être dédupliqués selon des règles personnalisées. Cet article présentera un algorithme basé sur la fermeture pour implémenter des opérations de fusion et de déduplication de tableaux avec des règles personnalisées. array_merge() 函数并不能满足所有场景,尤其是当合并的元素需要根据自定义规则去重时。本文将介绍一种基于闭包的算法,实现自定义规则的数组合并去重操作。

算法原理

该算法通过使用闭包作为比较函数,实现自定义的去重规则。闭包接收两个元素作为参数,并返回一个布尔值,表示两个元素是否相等。如果两个元素被闭包判定为相等,则只保留其中一个。

代码实现

function array_merge_distinct(array $arr1, array $arr2, callable $compare_func)
{
    $result = [];
    foreach ($arr1 as $key => $value) {
        $found = false;
        foreach ($arr2 as $key2 => $value2) {
            if ($compare_func($value, $value2)) {
                $found = true;
                break;
            }
        }
        if (!$found) {
            $result[$key] = $value;
        }
    }
    return array_merge($result, $arr2);
}

实战案例

假设我们有两个数组:

$arr1 = ['a', 'b', 'c'];
$arr2 = ['b', 'd', 'e'];

我们要根据以下规则合并并去重数组:

  • 如果两个元素相等(严格模式),则只保留一个。

我们可以使用闭包实现这个比较规则:

$compare_func = function ($value1, $value2) {
    return $value1 === $value2;
};

然后,将闭包作为参数传递给 array_merge_distinct()

Principe de l'algorithme

Cet algorithme implémente des règles de déduplication personnalisées en utilisant des fermetures comme fonctions de comparaison. La fermeture reçoit deux éléments en paramètres et renvoie une valeur booléenne indiquant si les deux éléments sont égaux. Si deux éléments sont jugés égaux par la clôture, un seul d'entre eux est retenu.

Implémentation du code

$merged = array_merge_distinct($arr1, $arr2, $compare_func);

🎜Cas pratique🎜🎜🎜Supposons que nous ayons deux tableaux :🎜
echo print_r($merged, true);
🎜Nous voulons fusionner et dédupliquer les tableaux selon les règles suivantes :🎜
  • Si les deux éléments sont égal (strictement en mode), un seul est retenu.
🎜Nous pouvons implémenter cette règle de comparaison en utilisant des fermetures : 🎜
Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => d
    [4] => e
)
🎜 Ensuite, passez la fermeture en paramètre à la fonction array_merge_distinct() : 🎜rrreee🎜Le résultat du tableau fusionné pour : 🎜rrreee🎜 : 🎜rrreee🎜🎜Extensions🎜🎜🎜L'algorithme peut être étendu si nécessaire pour prendre en charge des règles de comparaison plus complexes ou un comportement personnalisé. Par exemple, nous pouvons comparer en fonction des propriétés des objets, ou supprimer les doublons en fonction de la valeur de hachage des éléments, etc. 🎜

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