如何筛选多维数组中仅出现一次的子数组
如何筛选多维数组中仅出现一次的子数组
嘿,我来帮你搞定这个问题!你想要的是保留多维数组里那些子数组内容不重复的项,重复的子数组只保留第一次出现的那一个,对吧?
首先得明确:PHP里没法直接把数组当作另一个数组的键来判断重复,所以我们需要把每个子数组转换成一个唯一的字符串标识,比如用serialize()或者json_encode(),这样就能轻松记录哪些子数组已经出现过了。
这里给你两种实现方式,都是符合需求的:
方法一:foreach遍历(直观易懂)
这种方式逻辑清晰,新手也能快速理解:
// 用来记录已经出现过的子数组(序列化后的字符串作为键) $seen = []; // 存储过滤后的结果 $filtered = []; foreach ($a['test'] as $key => $subarray) { // 将子数组序列化为唯一字符串 $serialized = serialize($subarray); if (!isset($seen[$serialized])) { // 如果没见过这个子数组,就加入结果集 $filtered[$key] = $subarray; // 标记为已见过,避免后续重复添加 $seen[$serialized] = true; } } // 把过滤后的结果赋值回原数组 $a['test'] = $filtered;
方法二:用array_filter实现(更简洁)
你提到正在研究array_filter(),那这个方法正好适配你的需求,利用闭包和引用变量来实现:
$seen = []; $a['test'] = array_filter($a['test'], function($subarray) use (&$seen) { $serialized = serialize($subarray); // 如果已经见过这个子数组,就过滤掉 if (isset($seen[$serialized])) { return false; } // 标记为已见过,返回true保留当前子数组 $seen[$serialized] = true; return true; });
两种方法运行后,都会得到你想要的结果:重复的子数组只会保留第一次出现的那一个,所有内容唯一的子数组都会被保留下来,而且原数组的键也会被完整保留哦~
备注:内容来源于stack exchange,提问作者Otonel
相关产品推荐
相关产品推荐

