【问题标题】:Nested Json php for loop status[0] issue用于循环状态 [0] 的嵌套 Json php 问题
【发布时间】:2023-04-05 13:41:01
【问题描述】:

您好,我的 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 但是我不知道为什么会这样,因为当我提取如下值时它会起作用:
$id = $url->status[0]->id;

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

【问题讨论】:

  • 你查过 json_decode 对true 参数的作用吗? url 是变量名的错误选择。
  • 另请参阅How do I extract data from JSON with PHP? 以获取一些示例。第一个foreach 毫无意义,第二个应该只是循环["status"]。使用array_column 会更简单。
  • @mickmackusa 是的,我有,但我在原型设计中留下了它......谢谢
  • @mario 谢谢,array_column 函数将来会有所帮助。

标签: php arrays json loops foreach


【解决方案1】:

我从您的 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";
}

【讨论】:

    【解决方案2】:

    你的 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;
    }
    

    【讨论】:

      【解决方案3】:

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

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

      输出:

      Array (
          [0] => 00001
          [1] => 00002
          [2] => 00003 
      )
      

      Demo on 3v4l.org

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-17
        • 1970-01-01
        • 2016-06-23
        • 1970-01-01
        • 2021-04-10
        • 1970-01-01
        相关资源
        最近更新 更多