经由过程关包界说自界说比拟规定来归并以及往重数组,关包接收二个元艳并返归布我值暗示相称性,相称的元艳将被舍弃。经由过程遍历数组并应用关包往重,终极完成自界说划定的数组归并往重。
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仄台别的相闭文章!
发表评论 取消回复