如果键相同而不使用嵌套循环,则多维数组合并为一个数组

 [

      {

        "status": true,

        "data": [

          {

            "id": 2,

            "name": "Algeria",

            "country_code": "DZ",

            "regions": [

              {

                "id": 2,

                "country_id": 2,

                "region_code": "RG01",

                "depots": [

                  {

                    "id": 5,

                    "region_id": 2,

                    "depot_code": "DP04",

                    "depot_name": "North Depot",

                    "area": [

                      {

                        "id": 1,

                        "depot_id": 5,

                        "area_code": "AR1",

                        "area_name": "Area-1"

                      },

                      {

                        "id": 2,

                        "depot_id": 5,

                        "area_code": "AR2",

                        "area_name": "Area-2"

                      }

                    ]

                  },

                  {

                    "id": 6,

                    "region_id": 2,

                    "depot_code": "DP06",

                    "depot_name": "east Depot",

                    "area": [

                      {

                        "id": 3,

                        "depot_id": 6,

                        "area_code": "AR3",

                        "area_name": "Area-3"

                      }

                    ]

                  }

                ]

              },

              {

                "id": 3,

                "country_id": 2,

                "region_code": "RG02",

                "depots": []

              }

            ]

          }

        ]

      }

    ]


 

我想将区域合并到单个数组中



    "area": [

      {

        "id": 1,

        "depot_id": 5,

        "area_code": "AR1",

        "area_name": "Area-1"

      },


我不想使用多个 foreach。提前致谢。


陪伴而非守候
浏览 123回答 2
2回答

qq_笑_17

您可以使用以下代码递归迭代所有结构并仅提取您需要的数据(按键)。我假设 $data 具有您的原始数据结构,并且在 $result 中您将获得区域数组:$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($data), RecursiveIteratorIterator::SELF_FIRST);$result = [];foreach ($it as $k => $v) {    if ($k === 'area') {        $result = array_merge($result, $v);    }}

元芳怎么了

我不会使事情过于复杂,遍历您的数据结构。将所有区域添加到集合中。准备您的数据结构,我添加了一个检查以确保没有重复项unique()。$data = 'your-data';$areas = collect();foreach($data->data as $country) {    foreach($country->regions as $region) {        foreach ($region->depots as $depot) {            $areas->concat($depot->area);        }    } }$result = ['area' => $areas->unique('id')->all()];
打开App,查看更多内容
随时随地看视频慕课网APP