从API响应遍历PHP Laravel中的多维数组时遇到的问题

时间:2018-12-21 15:17:23

标签: php arrays laravel multidimensional-array

正在开发Laravel应用程序,由此我调用API来获取一些数据并显示 在视图上。返回的数据是多维数组/嵌套数组,其中 数据对象中的第一个数组可能为 unit_sales agents ,如下面的代码所示。

现在,我正在尝试创建一些PHP逻辑来检查第一个数组键是unit_sales还是 代理程序会获取其下的所有数据并作为变量返回。例如,如果下面的数据对象中的第一个array_key是unit_sales,则提取其下的所有数据并存储在变量中;如果代理,则提取其下的所有数据,存储在变量中并返回。

NB〜API响应存储在名为rs的变量中

API的响应1

{
    "request_time": "2018-12-21 16:56:22",
    "response_time": "2018-12-21 16:56:23",
    "status": "success",
    "message": "Hierachies",
    "data": {
        "unit_sales": [
            {
                "id": "11**",
                "agents": [
                    {
                        "agent_no": "68**",
                        "policies": [
                            "IL***********",
                            "IL************",
                            "IL***********"
                        ]
                    },
                    {
                        "agent_no": "53983",
                        "policies": [
                            "IL**********",
                            "IL***********",
                            "IL***********"
                        ]
                    }
                ]
            }
        ]
    }
}

API的响应2

{
    "request_time": "2018-12-21 16:56:22",
    "response_time": "2018-12-21 16:56:23",
    "status": "success",
    "message": "Hierachies",
    "data": {
        "agents": [
            {
                "agent_no": "68**",
                "policies": [
                    "IL***********",
                    "IL************",
                    "IL***********"
                ]
            },
            {
                "agent_no": "53**",
                "policies": [
                    "IL**********",
                    "IL***********",
                    "IL***********"
                ]
            }
        ]
    }
}

我写过但一路迷路的逻辑

    if(array_key_exists("unit_sales",$rs)){
        $data= collect(collect($rs)->first()[0])['unit_sales'];
      $data = collect($data)->map(function($item){
        if(array_key_exists('unit_sales',$item)){
          $agents  = collect($item['unit_sales'])->map(function($item2){
            if(array_key_exists('agents',$item2)){
              return $item2['unit_sales'];
            }
        });
          return $unit;
        }else{
         return ;
        }
      });
    }

   else if(array_key_exists("agents",$rs)){
      $data= collect($rs)->'agents';
  $data = collect($data)->map(function($item){
    if(array_key_exists('agents',$item)){
      $agents  = collect($item['agents'])->map(function($item2){
        if(array_key_exists('agents',$item2)){
          return $item2['agents'];
        }
    });
      return $agents;
    }else{
     return ;
    }
  });
}

2 个答案:

答案 0 :(得分:1)

如果收到json响应,则需要对其进行解码以访问其键,然后是值

$rs = json_decode($rs);

$data = $rs->data; //sets array to just the "data" key

if(array_key_exists("unit_sales",$data))
{
    //do stuff
} 
else if (array_key_exists("agents",$data))
{
    //do stuff
}

答案 1 :(得分:0)

看起来您只需要在执行data方法之前进入array_key_exists

也许是这样...

array_key_exists("unit_sales",$rs->data)

我也同意@omphonia,您可能需要先json_decode()回复。