Вставить многомерный JSON / массив в многомерный JSON / массив в PHP - PullRequest
1 голос
/ 20 сентября 2019

Я хочу вставить некоторые данные в sub в данных json с foreach

пример:

  • каждый дом имеет одну или несколько комнат
  • данные комнат в subhouse

это код:

<?php

$houses = Houses::find()->all();
foreach($houses AS $house){
    $a[] = [
        'house_name' => $house->name,
         'color_wall' => $house->color_wall,
    ];

    $rooms = Rooms::find()->where(['house_id' => $house->id])->all();
    foreach($rooms AS $room){
        $b[] = [
            'room_name' => $room->name,
            'color_wall' => $room->color_wall,
        ];
    }
    array_push($a,$b);
}

Я хочу, чтобы массив выглядел так:

[
    {
        'house_name' : 'house 1',
        'color_wall' : 'white',
        'room' : [
            {
                'room_name' : 'guest room',
                'color_wall' : 'blue',  
            },
            {
                'room_name' : 'primary room',
                'color_wall' : 'green', 
            }
        ]
    }
]

Но я не могу ввести комнаты вподмассивы.

[
    {
        'house_name' : 'house 1',
        'color_wall' : 'white',
    }
    {
        'room_name' : 'guest room',
        'color_wall' : 'blue',  
    },
    {
        'room_name' : 'primary room',
        'color_wall' : 'green', 
    }
]

Ответы [ 2 ]

0 голосов
/ 20 сентября 2019

Добавьте идентификатор дома к набору данных вашего дома.

Переберите массив ваших домов и проверьте, совпадает ли ключ дома с набором данных комнаты.Если это так, добавьте его в массив домов в «комнаты».

Пример:

foreach(Houses::find()->all() as $house) {

    $house['rooms'] = [];

    $house_rooms = Rooms::find()->where(['house_id' => $house->id])->all();
    foreach($house_rooms as $room) {
        $house['rooms'][] = $room;
    }

}

var_dump($houses);

TLDR;Добавьте идентификатор комнаты в массив $ Houses, переберите каждый дом и соберите комнату, которая принадлежит этому дому по отдельности.

0 голосов
/ 20 сентября 2019

Сначала получите данные о комнате и сохраните их в комнате, затем добавьте эту комнату в комнату.

Пожалуйста, используйте этот код.

 <?php

        $houses = Houses::find()->all();
        foreach($houses AS $house){

            $house_name = $house->name;
            $color_wall = $house->color_wall;

            $rooms = Rooms::find()->where(['house_id' => $house->id])->all();
            $room_data = [];
            foreach($rooms AS $room){
                $room_data[] = [
                    'room_name' => $room->name,
                    'color_wall' => $room->color_wall,
                ];
            }

            $a[] = [
                'house_name' => $house_name,
                'color_wall' => $color_wall,
                'room' => $room_data,
            ];
        }

        print_r($a)
 ?>
...