php怎么删除二维数组重复值_php二维数组去重array_map与array_unique组合法【技巧】

PHP二维数组去重需用特殊方法:一、serialize+array_unique+unserialize;二、json_encode+索引数组判断;三、array_column+array_unique+array_intersect_key(需唯一键);四、usort+相邻比较(会改变顺序)。

php怎么删除二维数组重复值_php二维数组去重array_map与array_unique组合法【技巧】

如果您需要对PHP中的二维数组进行去重操作,直接使用array_unique无法生效,因为其默认只支持一维数组的值比较。以下是几种可行的实现方法:

一、使用array_map与array_unique组合法

该方法通过将二维数组的每一项序列化为字符串,再用array_unique去重,最后反序列化还原结构。此方式利用了array_unique对字符串值的有效识别能力。

1、使用array_map将二维数组的每个子数组通过serialize函数转换为字符串。

2、对生成的字符串数组调用array_unique进行去重。

立即学习PHP免费学习笔记(深入)”;

3、再次使用array_map配合unserialize将去重后的字符串还原为原始二维数组结构。

4、注意确保子数组中不包含不可序列化的资源类型或闭包,否则会触发警告。必须确保所有键名和值均可被serialize安全处理

二、使用循环遍历+in_array判断法

该方法通过逐个提取子数组,并在新数组中检查是否已存在相同结构的子数组,从而实现去重。适用于数据量不大且需严格保持原始顺序的场景。

1、初始化一个空数组用于存放去重后的结果。

2、遍历原始二维数组,对每个子数组使用json_encode编码为唯一字符串。

3、将编码后的字符串存入临时索引数组,同时检查该字符串是否已在索引数组中存在。

4、若不存在,则将当前子数组追加到结果数组,并将该字符串加入索引数组。使用json_encode可避免serialize对对象或资源的依赖问题


站酷梦笔

站酷梦笔

国内知名设计社区站酷推出的AI插画生成工具

站酷梦笔
170


查看详情
站酷梦笔

三、使用array_column与array_intersect_key组合法

该方法适用于具有明确唯一标识字段(如’id’)的二维数组,通过提取该字段值并去重,再根据去重后的键重新筛选原数组。

1、使用array_column提取指定键(例如’id’)的所有值形成一维数组。

2、对该一维数组执行array_unique获取去重后的值列表。

3、使用array_flip将去重后的值转为键,再用array_intersect_key筛选原始二维数组对应键位置的元素。

4、注意该方法仅适用于存在天然唯一键字段的场景,若无固定唯一键则无法准确保留首次出现的完整子数组

四、使用自定义比较函数配合usort与相邻比较法

该方法先对二维数组按子数组内容排序,再遍历比较相邻两项是否完全一致,跳过重复项。适合需要深度比较且子数组结构较复杂的情况。

1、使用usort配合自定义回调函数,对二维数组按子数组的json_encode结果升序排列

2、初始化结果数组,并将排序后首项直接加入。

3、从第二项开始循环,每次将当前项与前一项的json_encode结果进行字符串比较。

4、若不相等,则将当前项加入结果数组;否则忽略。排序步骤会改变原始索引顺序,需确认是否允许顺序变动

以上就是php怎么删除二维数组重复值_php二维数组去重array_map与array_unique组合法【技巧】的详细内容,更多请关注php中文网其它相关文章!

https://www.php.cn/faq/1844975.html

发表回复

Your email address will not be published. Required fields are marked *