PHP循环实现数组嵌套:向$inner_data存变量后存入$details_data遇问题
解决数组嵌套结构构建的问题
看起来你是想构建一个二维数组,让$details_data里的每个元素都是一组独立的$inner_data子数组对吧?我看你的代码里有个关键问题:每次循环没有重置$inner_data数组,导致它会一直累积之前循环的数据,最后$details_data里的每个元素都是同一个不断变大的数组,这肯定不是你想要的结果。
问题根源
你把$inner_data = array();放在了循环外面,这意味着整个循环过程中只会创建一次这个数组。每次循环调用array_push($inner_data, ...)时,都是往同一个数组里追加元素,而不是生成新的独立子数组。最后$details_data里存的都是同一个$inner_data的引用(或者说不断变大的版本),完全不符合你想要的嵌套结构。
修正后的代码方案
只需要把$inner_data的初始化移到循环内部,让每次循环都生成一个全新的空数组,再存入当前循环的元素,最后添加到$details_data里就可以了:
$details_data = array(); for($i=0; $i < $count_selected; $i++){ $inner_data = array(); // 每次循环都新建一个空的子数组 $amount[$i] = $quantity[$i] * $price[$i]; // 往当前的子数组里添加本次循环的元素 array_push($inner_data, $last_insert_id, $amount[$i], $quantity[$i], $products[$i]); // 将这个独立的子数组存入外层数组 array_push($details_data, $inner_data); }
更简洁的写法(可选)
其实你也可以不用array_push,直接通过数组赋值的方式创建子数组,代码会更简洁直观:
$details_data = array(); for($i=0; $i < $count_selected; $i++){ $amount = $quantity[$i] * $price[$i]; // 直接生成子数组并添加到外层数组 $details_data[] = array( $last_insert_id, $amount, $quantity[$i], $products[$i] ); }
这样修改后,$details_data就会变成一个标准的二维数组,每个元素都是对应单次循环的独立数据组啦。
内容的提问来源于stack exchange,提问作者Emjey23
相关产品推荐
相关产品推荐

