PHP嵌套foreach判断两数组ID匹配时结果重复输出问题修复
问题根源
你的逻辑判断位置错了。现在的写法是,对第一个数组里的每一个$n,内层遍历第二个数组时,只要碰到当前$r->cid和$n->id不相等,就立刻输出id,根本没有遍历完第二个数组的所有元素、确认这个id完全不存在再输出。
举个实际场景:如果$response有3个元素,其中只有1个元素的cid和当前$n->id匹配,剩下2个都不匹配,那遍历到这2个不匹配的元素时都会触发输出,同一个id就会被打印2次,和你说的「匹配值越多重复次数越高」的现象完全一致。
修复方法
方法1:修正嵌套循环逻辑
给每个待检查的id加一个存在标记,内层循环遍历完所有$response项(或者找到匹配项提前终止)之后,再根据标记判断是否输出:
foreach ($name as $n) { $idExists = false; foreach ($response as $r) { if ($n->id === $r->cid) { $idExists = true; break; // 找到匹配就不用继续遍历剩下的元素,减少无意义计算 } } if (!$idExists) { echo $n->id; } }
方法2:高性能写法(数据量大时优先用)
先把第二个数组里所有cid抽成一维的索引数组,再用内置函数判断存在性,时间复杂度比双层循环低很多,数据规模大的时候性能差距非常明显:
// 提前提取所有已存在的cid $existedCidList = array_column($response, 'cid'); foreach ($name as $n) { if (!in_array($n->id, $existedCidList)) { echo $n->id; } }
内容的提问来源于stack exchange,提问作者ZNO
相关产品推荐
相关产品推荐

