Создание вложенного массива с помощью 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,
        )
    )
)

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

Вы должны установить ключ Children для переданного массива, который вы создаете в первом foreach, а не для основного массива, в котором вы пропустили числовой индекс «родителя».

AymDev 28.08.2024 10:11
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
1
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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, но это не так.

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

Я предполагаю, что $person['Children'] должен быть массивом массивов, иначе в этом массиве будет только последний дочерний элемент.

u_mulder 28.08.2024 10:30

@u_mulder Да, я исправил это. В любом случае этот код не может работать из-за проблемы с переменными. Очевидно, что код в вопросе не является кодом, используемым для генерации результатов в вопросе, что является серьезным упущением.

KIKO Software 28.08.2024 10:31

Другие вопросы по теме