PHP中使用foreach循环构建嵌套数组的问题求助
修正PHP嵌套数组构建问题
问题概述
通过foreach循环构建嵌套数组时,无法生成目标结构,存在两个核心问题:
- 动态添加的元素多了一层不必要的数组嵌套
row_ids字段格式不符合预期(当前为包含字符串的单元素数组,需改为整数数组)
错误原因分析
- row_ids初始化错误:初始代码中将
row_ids设为array('0, 1'),这是包含单个字符串的数组,而非预期的整数数组array(0, 1) - 元素添加方式错误:循环中使用
$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
相关产品推荐
相关产品推荐

