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

PHP中使用foreach循环构建嵌套数组的问题求助

修正PHP嵌套数组构建问题

问题概述

通过foreach循环构建嵌套数组时,无法生成目标结构,存在两个核心问题:

  • 动态添加的元素多了一层不必要的数组嵌套
  • row_ids字段格式不符合预期(当前为包含字符串的单元素数组,需改为整数数组)

错误原因分析

  1. row_ids初始化错误:初始代码中将row_ids设为array('0, 1'),这是包含单个字符串的数组,而非预期的整数数组array(0, 1)
  2. 元素添加方式错误:循环中使用$values['value'][] = array(...)的方式,会自动将新元素包裹在一个额外的数组中,导致多一层嵌套;正确做法应为直接指定索引赋值

修正后的代码

$json = '{"id":"118","item_key":"m6jgm","name":"Bright Madire","ip":"192.168.92.81","meta":{"2b9ta":"Bright","qy6sa":"Madire","k9ngs":"Bright Madire","y69z6":"bmadire@vayaafrica.com","58nj0":"0774222497","q78bq":"IS","culq4":"Software Engineer","tqe5r":"IT and Electronics","procured_items":{"form":"11","i116":{"procured_item_name":"Macbook Pro","procured_item_quantity":"1","gmy78":"","wki9u":"","procured_item_description":"- 500GB SDD\r\n- 16GB Unified\r\n- M2 Chip Processor\r\n- 15\" Screen","arpya":""},"i117":{"procured_item_name":"Lenobo ThinkPad","procured_item_quantity":"2","gmy78":"","wki9u":"","procured_item_description":"- 500GB SDD\r\n- 16GB Unified\r\n- Core i7 Processor\r\n- 15\" Screen","arpya":""}},"procured_item_name":["Macbook Pro","Lenobo ThinkPad"],"procured_item_quantity":["1","2"],"gmy78":["",""],"wki9u":["",""],"procured_item_description":["- 500GB SDD\r\n- 16GB Unified\r\n- M2 Chip Processor\r\n- 15\" Screen","- 500GB SDD\r\n- 16GB Unified\r\n- Core i7 Processor\r\n- 15\" Screen"],"arpya":["",""],"zzrfl":"","1g8ya":"","6cm1d":"RFQ","qcl2b":"No","xx48b":"2023-07-27","zsii":"16:40","request_status":"Send To Suppliers","qaolg":"","sromp":"","department_approval":"Approve","tvghy":"","finance_approval":"Approve","w2iyy":"","2iyii":"","2iyii-value":"8","fsu1s":"","nh3tu":"3"},"form_id":"10","post_id":"0","user_id":"8","parent_item_id":"0","is_draft":"0","updated_by":"10","created_at":"2023-07-27 14:24:42","updated_at":"2023-07-27 14:37:10"}';

$entryArray = json_decode($json, TRUE);
$procuredItems = $entryArray['meta']['procured_items'];

$first_field = 320;
$second_field = 323;
$third_field = 322;

$i = 1;
$rowIds = [];

// 初始化目标数组,预留row_ids字段
$values['value'] = array(
    'form' => '10',
    'row_ids' => $rowIds,
);

foreach($procuredItems as $key=>$value) {
    if ($key != "form"){
        $currentIndex = $i - 1;
        // 直接给指定索引赋值,避免额外嵌套
        $values['value'][$currentIndex] = array(
            0 => '', 
            $first_field => $value['procured_item_name'], 
            $second_field => $value['procured_item_quantity'], 
            $third_field => $value['procured_item_description']
        );
        // 动态收集row_ids
        $rowIds[] = $currentIndex;
        $i += 1;
    }
}

// 最后更新row_ids为收集到的整数数组
$values['value']['row_ids'] = $rowIds;

// 输出验证
var_dump( $values['value'] );

修正效果说明

修正后的代码会生成与预期一致的数组结构:

  • row_ids变为包含整数的数组[0, 1]
  • 动态添加的元素不再有多余嵌套,直接作为value数组的索引为0、1的元素
  • 整体结构完全匹配目标输出

内容的提问来源于stack exchange,提问作者Brillante En

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 03:34:53