为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
陪伴而非守候 2023-04-28 15:17:12
 [      {        "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。提前致谢。
查看完整描述

2 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

您可以使用以下代码递归迭代所有结构并仅提取您需要的数据(按键)。我假设 $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);

    }

}


查看完整回答
反对 回复 2023-04-28
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

我不会使事情过于复杂,遍历您的数据结构。将所有区域添加到集合中。准备您的数据结构,我添加了一个检查以确保没有重复项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()];


查看完整回答
反对 回复 2023-04-28
  • 2 回答
  • 0 关注
  • 122 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信