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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 04:33:26