You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP如何按值合并两个数组并去除重复值?

PHP 合并数组并按值去重的最优方案

问题描述

假设有两个简单数组:

$a = [1, 2, 3];
$b = [2, 3, 4, 5];

需要合并成无重复值的数组,最终结果为:

[1, 2, 3, 4, 5];

试过array_merge()、array_replace()这类函数,但它们针对关联数组的键操作,不符合按值处理的需求;Laravel集合的->merge()、->concat()、->replace()、->union()等方法也无法实现按值去重合并。不想用foreach结合in_array()的低效写法,求更优方案。

2022年9月8日编辑:本问题曾被标记为另一问题的重复,但该问题的已接受答案并未解决按值合并的需求,其中的array_merge_recursive()也无法解决我的问题,且该问题涉及关联数组,而我完全不关注键,因此本问题并非重复。

原生PHP解决方案

方法1:array_merge + array_unique(直观易用)

先合并数组再去重,适合大多数常规场景:

// 合并去重,保留原数组索引
$merged = array_unique(array_merge($a, $b));
// 若需要重置为连续数字索引
$merged = array_values(array_unique(array_merge($a, $b)));

方法2:array_flip 两次(性能更优)

利用数组键的唯一性,通过两次反转实现去重,大数据量下效率明显更高:

// 合并去重,原索引会丢失(反转后键值互换)
$merged = array_flip(array_flip($a) + array_flip($b));
// 重置为连续数字索引
$merged = array_values(array_flip(array_flip($a) + array_flip($b)));

Laravel集合解决方案

用concat()追加第二个集合的元素,再用unique()按值去重:

$collectionA = collect($a);
$collectionB = collect($b);
// 得到去重后的集合
$mergedCollection = $collectionA->concat($collectionB)->unique();
// 转为普通数组
$mergedArray = $mergedCollection->toArray();

内容的提问来源于stack exchange,提问作者Sturm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 03:45:40