循环json对象作为PHP中的数组

时间:2018-02-12 10:46:49

标签: php arrays json laravel

如何循环响应以获取所有ID和名称? 如果响应如下:

{
  "Data": [
    {
      "Id": "4321",
      "Name": "Dog"
    },
    {
      "Id": "749869",
      "Name": "Cat"
    }
  ]
}

我可以使用以下代码获取所有ID和名称:

foreach (json_decode($response->content)->Data as $resp) {
    echo $resp->Id;
    echo $resp->Name;
}

但是,如果这样的反应:

    {
      "Data": {
        "dog": {
          "Id": "4321",
          "Name": "Dog"
        },
        "cat": {
          "Id": "749869",
          "Name": "Cat"
        }
      }
    }

如何在不知道阵列数量的情况下获取所有ID和名称?谢谢。

3 个答案:

答案 0 :(得分:0)

您可以让PHP将所有内容读入(适用的关联)数组。

foreach (json_decode($response->content, true)["Data"] as $resp) { //2nd parameter is to decode as array
    echo $resp["Id"];
    echo $resp["Name"];
}

示例运行:https://eval.in/954621

或者你可以做懒惰的事情并且只是演员:

foreach ((array)json_decode($response->content)->Data as $resp) {
    echo $resp->Id;
    echo $resp->Name;
}

答案 1 :(得分:0)

好吧,如果你想将所有id提取到一个数组中(我假设你所有的意思都是一个数组),那么在数据库查询中使用它作为一个例子。我建议你这样做。

query.whereEqualTo("friendsList","");  

答案 2 :(得分:0)

你做同样的事! foreach循环对两者都有效。 json响应应该每次具有相同的格式,除非你有一个非常奇怪的API。

<?php

$response = json_decode($json);
foreach($response as $animal => $data) 
{
   echo $animal; 
   echo $data->id;
   echo $data->name;
}