嵌套的Json php获取循环状态[0]问题

时间:2019-01-16 00:11:45

标签: php arrays json loops foreach

嗨,我的Json格式如下:

{
   "result":0,
   "status":[
      {
         "id":"00001",
         "vid":"yes"
      },
      {
         "id":"00002",
         "vid":"yes"
      },
      {
         "id":"00003",
         "vid":"no"
      }
   ]
}

我想在PHP中使用json_decode函数来解码id值,如下所示:

 00001
 00002
 00003

这是我使用的代码:

$url = file_get_contents("URL");

foreach(json_decode($url, true) as $key=>$value){
    foreach($value->status[0] as $key1=>$value1){
        echo $value1->id;
    }
}

据我所知,问题似乎出在status[0]上,而使用status[0]是选择status键的唯一方法。但是我无法使循环正常工作。

我收到错误消息:Trying to get property of non-object意味着status[0]在Json数组中找不到status,但是我不知道为什么会这样,因为当我提取类似这样的值时它会起作用:< br />  $id = $url->status[0]->id;

如果有人有任何建议,我将不胜感激。谢谢

3 个答案:

答案 0 :(得分:2)

我从json数据中删除了一些逗号。

代码:演示:https://3v4l.org/C1Mda

$json = '{"result":0,"status":[{"id":"00001"},{"id":"00002"},{"id":"00003"}]}';

foreach(json_decode($json, true)['status'] as $status){
    echo $status['id'] , "\n";
}

输出:

00001
00002
00003

因为您使用的是json_decode的true参数,所以会生成一个数组。您需要使用方括号语法。

或者您可以使用对象:

foreach(json_decode($json)->status as $status){
    echo $status->id , "\n";
}

答案 1 :(得分:1)

您的JSON无效,外观{“ id”:“ 00001”,} 并且json_decode($ json,false)应该是

工作解决方案:

$json = '{
"result":0,
"status":[{"id":"00001"},
  {"id":"00002"},
  {"id":"00003"}
]
}';

$data = json_decode($json, false);

foreach ($data->status as $status){
    echo $status->id;
}

答案 2 :(得分:1)

您可以只使用array_column从JSON的const元素中提取id值(一旦通过删除多余的逗号对其进行了纠正):

status

输出:

$ids = array_column(json_decode($json, true)['status'], 'id');
print_r($ids);

Demo on 3v4l.org