PHP foreach嵌套循环赋值数组时内层迭代数据重复累加问题咨询
问题根源
出现该问题的核心原因是$inner_fields数组的初始化时机错误:
$inner_fields默认在全局作用域下生效,你没有在每次外层循环迭代前重置该数组,每次内层循环都在往同一个数组追加元素,因此外层第N次循环时,数组内会保留前N-1次循环的所有内层数据,最终导致写入数据重复累加。- 你之前尝试清空数组后只能拿到最后一条数据,是因为清空时机错误:如果在内层循环结束后清空,会把当前轮次需要写入的数据一并清除;如果在内层循环内部清空,会覆盖上一条内层数据,最终只会保留最后一条内层数据。
修复方案
调整数组初始化时机,在每轮外层循环开始时重置$inner_fields为空数组,保证每轮处理的内层数据都是独立的,修改后代码如下:
foreach($results as $result) { // 每轮外层循环开始前重置内层数组,清除上一轮残留数据 $inner_fields = []; foreach($result->inner as $inner) { $inner_fields[] = [ 'field_2312312' => $inner->name, 'field_3345343' => $inner->desc ]; } // 内层循环遍历完成后,在此处执行当前轮次的数据库写入操作 // add data from inner_fields inside the new db entry }
修复后的执行逻辑为:
- 进入外层循环,先清空
$inner_fields数组 - 遍历当前
$result的所有内层数据,全部存入$inner_fields - 写入当前
$inner_fields的内容到数据库 - 进入下一轮外层循环,重复上述流程,直到所有数据处理完成
内容的提问来源于stack exchange,提问作者youwhatmate
相关产品推荐
相关产品推荐

