PHP数组去重array_unique与多维数组处理
时间:2026-11-14 07:19 作者:emer 分类: PHP
前言
一维数组去重直接用 array_unique,但多维数组(如查询结果行)直接调用会报错或按序列化比较失效。很多人在处理列表、标签去重时踩这个坑。本文讲解一维去重、按指定键去重、保留首次出现、多维数组的正确写法。
操作步骤
1. 一维数组去重
$arr = [1,2,2,3,3,3];
$unique = array_unique($arr);
返回保留首次出现的结果,注意键名不重排。
2. 重置键名
$unique = array_values(array_unique($arr));
3. 按关联数组某个键去重(多维)
$rows = [
['id'=>1,'name'=>'a'],
['id'=>2,'name'=>'b'],
['id'=>1,'name'=>'a'],
];
$seen = [];
$result = array_filter($rows, function($row) use (&$seen){
$key = $row['id'];
if (isset($seen[$key])) return false;
$seen[$key] = true;
return true;
});
$result = array_values($result);
4. 标签字符串去重
$tags = ['php','mysql','php','nginx'];
$tags = array_values(array_unique($tags));
5. 不区分大小写去重
$lower = array_unique(array_map('strtolower', $arr));
常见坑
- array_unique 对多维数组按序列化比较,结果不符合预期。
- 去重后键名保留原索引,foreach 或 JSON 输出可能出现空洞。
- 数字和字符串被当作不同值,严格比较需注意。
- 浮点数直接比较可能因精度重复判断失误。
- 大数组遍历去重性能差,先用键做映射更快。
- 关联数组按值去重要选唯一业务键,不能用整个行比较。
- 去重顺序依赖首次出现位置,不要假设排序。
总结
一维用 array_unique + array_values 重置键;多维用辅助数组按业务键标记去重。比较前统一大小写和类型,大数组优先用键映射。理解 array_unique 按值比较的特性,多维场景自己实现才不会出错。
遇到问题加QQ23979811 协助处理
标签: PHP array_unique 数组去重 多维数组