You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:35:04