«

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));

常见坑

  1. array_unique 对多维数组按序列化比较,结果不符合预期。
  2. 去重后键名保留原索引,foreach 或 JSON 输出可能出现空洞。
  3. 数字和字符串被当作不同值,严格比较需注意。
  4. 浮点数直接比较可能因精度重复判断失误。
  5. 大数组遍历去重性能差,先用键做映射更快。
  6. 关联数组按值去重要选唯一业务键,不能用整个行比较。
  7. 去重顺序依赖首次出现位置,不要假设排序。

总结

一维用 array_unique + array_values 重置键;多维用辅助数组按业务键标记去重。比较前统一大小写和类型,大数组优先用键映射。理解 array_unique 按值比较的特性,多维场景自己实现才不会出错。

遇到问题加QQ23979811 协助处理

标签: PHP array_unique 数组去重 多维数组