最常用且简洁的方法是 array_merge() + array_unique() + array_values();合并两数组后按值去重并重置为连续数字索引,适用于数值索引数组,避免键名冲突。

PHP合并两个数组并去重,最常用且简洁的方法是用 array_merge() + array_unique(),再用 array_values() 重置键名(可选)。
基础写法:合并后去重并重置索引
适用于数值索引数组,避免键名冲突或保留连续数字键:
$arr1 = [1, 2, 3]; $arr2 = [3, 4, 5]; $result = array_values(array_unique(array_merge($arr1, $arr2))); // 输出:[1, 2, 3, 4, 5]
保留键名时的注意事项
array_unique() 默认保留第一个出现的键值对,但会保留原始键名(可能导致非连续数字键)。如果不需要原键名,必须加 array_values();如果处理关联数组且想按值去重、保留首次出现的键名,可省略 array_values():
- 去重后仍需数字索引 → 一定要加
array_values() - 是关联数组,且希望保留第一次出现的键(如
['a'=>1, 'b'=>2]和['c'=>1]去重后留'a'=>1)→array_unique()默认行为已满足
处理多维数组或更复杂场景
array_unique() 默认只支持一维数组,对多维数组会报 Warning 并返回原数组。若需合并去重二维数组,需先序列化再操作:
立即学习“PHP免费学习笔记(深入)”;
$arr1 = [['id'=>1], ['id'=>2]];
$arr2 = [['id'=>2], ['id'=>3]];
$merged = array_merge($arr1, $arr2);
$serialized = array_map('serialize', $merged);
$unique_serialized = array_unique($serialized);
$result = array_map('unserialize', $unique_serialized);
注意:该方法要求数组结构可被 serialize() 安全处理,不含资源或闭包。
PHP 7.4+ 可用短语法简化(可选)
如果项目环境支持,可用箭头函数配合 array_reduce() 等实现更灵活逻辑,但日常使用中没必要过度复杂化。标准三步法清晰、稳定、兼容性好:
-
array_merge($a, $b)合并 -
array_unique(...)按值去重 -
array_values(...)重置为数字索引(按需)



















