如何使用foreach构建正确的嵌套关联多维数组?
解决PHP关联多维数组嵌套错误问题
目标数组
你想要构建的关联多维数组如下:
array( [0] => Array( 'Parent' => 'Mr Smith', 'Children' => array( 'Firstmane' => 'Bob', 'Surname' => 'Smith', 'Age' => 16, ) ), [1] => Array( 'Parent' => 'Mr Jones', 'Children' => array( 'Firstmane' => 'Davey', 'Surname' => 'Jones', 'Age' => 15, ) ) )
当前错误代码
你的现有代码:
foreach($Parents as $parent) { $opdata[] = ['Children'=>array(),'Parent'=>$name]; foreach($children as $child) { $opdata['Children'][] = [ 'Firstmane'=>$code, 'Surname'=>$cost, 'Age'=>$age, ]; } }
错误输出
代码执行后得到的错误结果:
array( [0] => Array( 'Parent' => 'Mr Smith', 'Children' => array() ), [1] => Array( 'Parent' => 'Mr Jones', 'Children' => array() ), 'Children' => array( [0] => array( 'Firstmane' => 'Bob', 'Surname' => 'Smith', 'Age' => 16, ), [1] => array( 'Firstmane' => 'Davey', 'Surname' => 'Jones', 'Age' => 15, ) ) )
问题原因
错误在于你直接给$opdata根数组添加了Children键,而不是往每个父级元素内部的Children数组中添加子元素。
修正方案
有两种简单的修正方式:
方式一:暂存父级元素(更清晰)
先构建单个父级的完整数组,再加入结果集合:
foreach($Parents as $parent) { // 初始化当前父级的数组,包含父级名称和空的子元素数组 $parentItem = [ 'Parent' => $parent['name'], // 替换成$parent中实际存储名称的键 'Children' => [] ]; // 遍历子元素,将属于当前父级的子元素加入对应数组 foreach($children as $child) { // 添加判断逻辑,确保子元素属于当前父级(比如姓氏匹配) if($child['Surname'] === $parent['Surname']) { $parentItem['Children'][] = [ 'Firstmane' => $child['Firstmane'], 'Surname' => $child['Surname'], 'Age' => $child['Age'] ]; } } // 将处理好的父级元素加入结果数组 $opdata[] = $parentItem; }
方式二:通过索引定位父级元素
利用循环的索引直接访问刚添加的父级元素,往其内部的Children数组追加子元素:
foreach($Parents as $index => $parent) { // 给结果数组的指定索引添加父级元素 $opdata[$index] = [ 'Parent' => $parent['name'], 'Children' => [] ]; foreach($children as $child) { // 定位到当前父级的Children数组,追加子元素 $opdata[$index]['Children'][] = [ 'Firstmane' => $child['Firstmane'], 'Surname' => $child['Surname'], 'Age' => $child['Age'] ]; } }
注意事项
- 代码中的
$parent['name']、$child['Firstmane']等变量,需要根据你实际的数组结构替换成对应键名; - 建议添加子元素与父级的关联判断逻辑,避免所有子元素被添加到每个父级的
Children数组中。
内容的提问来源于stack exchange,提问作者SteveAsh
相关产品推荐
相关产品推荐

