PHP过滤重复数组最常用array_unique(),适用于一维数组并保留首次出现元素及原始键名;多维数组需用serialize/array_map或手动遍历实现去重,按字段去重则需结合临时数组判断。

PHP过滤重复数组最常用的方法是用 array_unique(),它能直接去掉一维数组中的重复值,保留首次出现的元素。
基础用法:去重并保持键名
array_unique() 默认保留原始键名(不是数字索引),适合关联数组或需要维持键值对应关系的场景:
$arr = ['a', 'b', 'a', 'c', 'b'];$result = array_unique($arr);// 结果:['a'=> 'a', 'b'=> 'b', 'c'=> 'c']
注意:返回的是新数组,原数组不变;重复值被完全移除,只留第一个出现的。
处理多维数组(不能直接用 array_unique)
PHP 原生 array_unique() 不支持多维数组,会报错或返回空。常见解决方式:
立即学习“PHP免费学习笔记(深入)”;
用 json_encode() 把每行转成字符串再去重,再 json_decode() 还原 用 array_column() + array_unique() 提取某列去重(适用于按某个字段去重) 手动遍历 + in_array() 或 serialize() 判断是否已存在
简单示例(按整行去重):
$arr2d = [['id'=>1, 'name'=>'Tom'], ['id'=>2, 'name'=>'Jack'], ['id'=>1, 'name'=>'Tom']];$unique = array_map('unserialize', array_unique(array_map('serialize', $arr2d)));
去重后重置数字索引
如果希望得到连续的数字键(如 0,1,2…),用 array_values() 重新索引:
$arr = ['a', 'b', 'a', 'c'];$clean = array_values(array_unique($arr));// 结果:[0=>'a', 1=>'b', 2=>'c']
按特定字段去重(比如二维数组中按 ‘id’ 去重)
更实用的场景:保留每个 id 第一次出现的完整记录:
遍历数组,用一个临时键名数组记录已出现的 id 遇到新 id 才追加到结果中
代码片段:
$data = [['id'=>1, 'val'=>'x'], ['id'=>2, 'val'=>'y'], ['id'=>1, 'val'=>'z']];$seen = [];$result = [];foreach ($data as $item) { if (!in_array($item['id'], $seen)) { $result[] = $item; $seen[] = $item['id']; }}
基本上就这些。一维用 array_unique(),多维或按字段去重就得自己控制逻辑,不复杂但容易忽略键名和数据结构的影响。
以上就是php如何过滤重复的数组?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1341504.html
微信扫一扫
支付宝扫一扫