【问题标题】:Insert multidimensional json/array into multidimensional json/array in PHP在 PHP 中将多维 json/array 插入多维 json/array
【发布时间】:2019-09-20 08:40:17
【问题描述】:

我想用 foreach 在 json 数据中的 sub 中插入一些数据

示例:

  • 每间房子都有一个或多个房间
  • 子屋的房间数据

这是代码:

<?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', 
    }
]

【问题讨论】:

  • 如果您的 Eloquent 关系已设置好,则无需手动执行此操作。
  • “我不能”是什么意思?到目前为止,您尝试过什么?

标签: php arrays json


【解决方案1】:

首先,获取房间数据并保存在房间 arr 中,然后将此房间 arr 添加到房屋 arr 中。

请使用此代码。

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

【讨论】:

    【解决方案2】:

    将房屋 ID 添加到您的房屋数据集。

    遍历您的房屋数组并检查房屋密钥是否等于房间数据集。 如果是这样,请将其添加到“房间”下的房屋数组中。

    示例:

    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;将房间 id 添加到您的 $houses 数组中,遍历每个房屋并单独收集属于该房屋的房间。

    【讨论】:

      猜你喜欢
      • 2021-05-30
      • 1970-01-01
      • 1970-01-01
      • 2013-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-28
      相关资源
      最近更新 更多