PHP合并两数组去重取前N个元素,应先用array_merge合并、再用array_unique(SORT_REGULAR)去重、最后用array_slice截取;PHP 7.4+可选用splat运算符简化索引数组合并。

PHP合并两个数组并去重后取前N个元素,核心是先合并、再去重、最后截取。关键在于选择合适的函数组合,兼顾效率和语义清晰。
使用 array_merge + array_unique + array_slice
这是最直观且兼容性最好的方式,适用于所有 PHP 版本(包括旧版本):
- array_merge($arr1, $arr2) 合并数组,注意它会重置数字键、保留字符串键
-
array_unique(..., SORT_REGULAR) 去重,推荐加
SORT_REGULAR参数避免类型强制转换导致误判(如"1"和1被当成相同) - array_slice(..., 0, $n) 截取前 $n 个元素,自动处理越界($n 超过总数时不会报错)
示例:
$arr1 = [1, 2, 3];$arr2 = [3, 4, 5, 2];
$n = 4;
$result = array_slice(array_unique(array_merge($arr1, $arr2), SORT_REGULAR), 0, $n);
// 结果:[1, 2, 3, 4]
使用 splat 运算符(PHP 7.4+)更简洁
如果项目环境支持 PHP 7.4 及以上,可用展开语法替代 array_merge,写法更现代:
-
[...$arr1, ...$arr2]直接展开合并,仅适用于索引数组;若含字符串键,仍需用array_merge - 后续步骤不变:去重 → 截取
示例(索引数组):
$arr1 = [1, 2];$arr2 = [2, 3, 4];
$n = 3;
$result = array_slice(array_unique([...$arr1, ...$arr2], SORT_REGULAR), 0, $n);
按特定顺序保留(如优先保留 $arr1 中的元素)
默认 array_unique 保留首次出现的值。只要先合并 $arr1 再合并 $arr2,就能保证 $arr1 中的重复值优先被保留:
- 例如 $arr1 = ['a', 'b'], $arr2 = ['b', 'c'] → 合并后为 ['a','b','b','c'] → 去重后为 ['a','b','c'],'b' 来自 $arr1
- 无需额外逻辑,顺序由
array_merge的参数顺序决定
性能与注意事项
对于大数组,需注意:
-
array_unique时间复杂度约为 O(n),内部使用哈希表,实际性能良好 - 避免在循环中反复调用该组合操作;如需高频执行,可考虑缓存或改用更底层逻辑(如手动遍历 + isset 检查)
- 若数组含不可序列化值(如 resource、闭包),
array_unique会出错,需提前过滤
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











