Создание вложенного массива с помощью foreach

Я пытаюсь построить ассоциативный многомерный массив следующим образом:

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,
        )
    )
)

Я не могу понять, как добавить дочерние массивы в правильный вложенный массив с правильным родительским элементом.

🤔 А знаете ли вы, что...
PHP поддерживает расширения для работы с множеством сторонних сервисов и API.


58
1

Ответ:

Решено

Сначала создайте, затем назначьте, а не наоборот. Итак, в вашем случае код может выглядеть так:

foreach ($Parents as $parent) {
    $person = ['Parent' => $name];
    foreach ($children as $child) {           
        $person['Children'][] = ['Firstmane' => $code, 
                                 'Surname'   => $cost, 
                                 'Age'       => $age];
    }    
    $opdata[] = $person; 
}

Я говорю: «можно было бы посмотреть», потому что непонятно откуда берутся такие переменные типа $name, $code, $cost и $age. Я думаю, это должно происходить из переменных $parent и $child, но это не так.

Я также постарался сделать код более читабельным, используя отступы. Как вы будете делать отступы, зависит от вас, но объединение всего вместе не улучшит читабельность.