PHP合并二维数组并删除双方共有整行数据的实现方案
实现方法
核心逻辑是先找出两个数组中重复出现的Id,再过滤掉所有对应Id的条目即可,以下是两种常用实现方案:
方案1:哈希计数法(适合大数据量场景)
先统计所有Id的出现次数,仅保留出现次数为1的条目:
// 统计所有Id的出现频次 $idCount = []; $allItems = array_merge($array1, $array2); foreach ($allItems as $item) { $id = $item['Id']; $idCount[$id] = isset($idCount[$id]) ? $idCount[$id] + 1 : 1; } // 筛选仅出现1次的条目 $result = []; foreach ($allItems as $item) { if ($idCount[$item['Id']] === 1) { $result[] = $item; } }
方案2:内置函数组合写法(适合小数据量场景)
利用array_column、array_intersect先提取重复Id,再过滤合并:
// 提取两个数组的Id集合 $ids1 = array_column($array1, 'Id'); $ids2 = array_column($array2, 'Id'); // 取交集得到同时存在于两个数组的Id $dupIds = array_intersect($ids1, $ids2); // 分别过滤两个数组后合并 $result = array_merge( array_filter($array1, fn($v) => !in_array($v['Id'], $dupIds)), array_filter($array2, fn($v) => !in_array($v['Id'], $dupIds)) ); // 可选:重置为连续数字索引 $result = array_values($result);
注:如果PHP版本低于7.4不支持箭头函数,可替换为传统匿名函数:
array_filter($array1, function($v) use ($dupIds) { return !in_array($v['Id'], $dupIds); })
两种方案输出的结果都和你需要的目标格式完全一致。
内容的提问来源于stack exchange,提问作者Jandon
相关产品推荐
相关产品推荐

