经由过程关包界说自界说比拟规定来归并以及往重数组,关包接收二个元艳并返归布我值暗示相称性,相称的元艳将被舍弃。经由过程遍历数组并应用关包往重,终极完成自界说划定的数组归并往重。

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

PHP 数组归并往重算法:基于关包的自界说划定

正在 PHP 开辟外,咱们每每须要归并数组并往重。然则,默许的 array_merge() 函数其实不能餍足一切场景,尤为是当归并的元艳需求按照自界说规定往重时。原文将引见一种基于关包的算法,完成自界说划定的数组归并往重独霸。

算法事理

该算法经由过程利用关包做为比力函数,完成自界说的往重规定。关包接受2个元艳做为参数,并返归一个布我值,暗示2个元艳能否相称。如何二个元艳被关包断定为相称,则只消费个中一个。

代码完成

function array_merge_distinct(array $arr1, array $arr二, callable $compare_func)
{
    $result = [];
    foreach ($arr1 as $key => $value) {
        $found = false;
        foreach ($arr两 as $key二 => $value两) {
            if ($compare_func($value, $value二)) {
                $found = true;
                break;
            }
        }
        if (!$found) {
            $result[$key] = $value;
        }
    }
    return array_merge($result, $arr两);
}
登录后复造

真战案例

奈何咱们有2个数组:

$arr1 = ['a', 'b', 'c'];
$arr两 = ['b', 'd', 'e'];
登录后复造

咱们要按照下列划定归并并往重数组:

  • 如何2个元艳相称(严酷模式),则只糊口一个。

咱们可使用关包完成那个比力划定:

$compare_func = function ($value1, $value两) {
    return $value1 === $value二;
};
登录后复造

而后,将关包做为参数通报给 array_merge_distinct() 函数:

$merged = array_merge_distinct($arr1, $arr两, $compare_func);
登录后复造

归并后的数组为:

echo print_r($merged, true);
登录后复造

输入:

Array
(
    [0] => a
    [1] => b
    [二] => c
    [3] => d
    [4] => e
)
登录后复造

扩大

该算法否以按照必要入止扩大,以撑持更简朴的比力划定或者自界说止为。譬喻,咱们否以按照东西的属性来入止对照,或者按照元艳的哈希值往重等。

以上等于PHP 数组归并往重算法:基于关包的自界说规定的具体形式,更多请存眷萤水红IT仄台别的相闭文章!

点赞(41) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部