PHP 8.0 中推荐用 array_values(array_unique(array_merge($arr1, $arr2, $arr3), SORT_NUMERIC)) 合并去重,需显式指定 SORT_NUMERIC 避免类型误判,并确保 array_values 在最外层重置键名。

PHP 8.0 中用 array_values(array_unique(array_merge())) 合并多个数组并去重,写法很简单,但要注意参数顺序和数据类型兼容性。
基础写法(推荐)
直接将多个数组传给 array_merge(),再套上 array_unique() 和 array_values():
$arr1 = [1, 2, 3]; $arr2 = [3, 4, 5]; $arr3 = [5, 6]; $result = array_values(array_unique(array_merge($arr1, $arr2, $arr3))); // 输出:[1, 2, 3, 4, 5, 6]
注意键名重置和类型安全
array_unique() 默认用 string 比较,可能导致数字和字符串混排出错(如 0 === '0')。PHP 8.0 支持第三个参数指定比较方式:
- 用
ARRAY_FILTER_USE_BOTH不适用,应选SORT_REGULAR(默认)、SORT_NUMERIC或SORT_STRING - 若数组含整数和字符串数字,建议显式用
SORT_NUMERIC避免误判 -
array_values()必须放在最外层,否则键名不会重置为连续数字索引
处理关联数组或需保留原始类型
如果原数组是关联的,且你希望去重时按值比较、不丢失结构逻辑,可先用 array_merge(...$arrays) 展开(PHP 5.6+ 支持):
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
$arrays = [$arr1, $arr2, $arr3]; $result = array_values(array_unique(array_merge(...$arrays), SORT_NUMERIC));
这样更灵活,也便于动态传入数组列表。
替代方案(更清晰/健壮)
如果逻辑变复杂(比如要忽略空值、过滤非标量),建议拆开写:
- 先
array_merge(...$arrays) - 再
array_filter($merged, 'is_scalar')去掉 null/array/resource - 再
array_unique(..., SORT_NUMERIC) - 最后
array_values()
比一行嵌套更易读、易调试,也方便加日志或条件判断。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










