【问题标题】:Create foreach loop from JSON file从 JSON 文件创建 foreach 循环
【发布时间】:2015-11-01 12:09:03
【问题描述】:

我有一个 json 文件 (items.json),如下所示:

{"response":{"success":1,"current_time":1446373851,"items":[
{
"Item1": {"last_updated":1446372015,"quantity":73,"value":1200},
"Item2": {"last_updated":1446372015,"quantity":40,"value":5297},
"Item3": {"last_updated":1446372015,"quantity":148,"value":2507}
}]}}

我尝试创建一个 for 循环来创建具有 json 中每个项目的值的元素:

$values = file_get_contents( $siteurl.'/json/items.json');
$values = json_decode($values);

foreach ($values->items as $key => $value) {

if($value==Item1 && $value->value>1000){
<p><?php echo $value->value ; ?></p>
}
}

在上面的示例中,我正在测试“items”(Item1)中的第一个值。我希望能够为所有这三个项目创建一个 foreach。

但浏览器输出以下错误“警告:为 foreach() in 提供的参数无效”。

我如何正确创建一个 foreach,我可以在其中获取适用于我的 json 文件格式的所有“项目”对象(例如“项目 1”和“项目 2”)的值。

【问题讨论】:

  • 只需 var_dump 并检查结构?

标签: php json


【解决方案1】:

您的项目实际上是在“响应”对象中,然后您将项目对象也包装在一个数组中。如果您无法编辑 items.json,那么您可以这样做

$values = file_get_contents( $siteurl.'/json/items.json');
$values = json_decode($values);

foreach ($values->response->items as $key => $value) {
   foreach($value as $key => $value) {
       if($key == 'Item1' && $value->value > 1000) {
           echo $value->value;
        }
    }
}

然而,更好的解决方案是从 items.json(方括号)中删除数组,因为它似乎是多余的,然后执行:

$values = file_get_contents( $siteurl.'/json/items.json');
$values = json_decode($values);

foreach ($values->response->items as $key => $value) {
    if($key == 'Item1' && $value->value > 1000) {
        echo $value->value;
    }
}

【讨论】:

    【解决方案2】:

    请试试这个方法

    foreach ($values as $key => $value) {
    
    
        foreach($value->items as $k => $v){
            foreach($v as $k1 => $v1){
    
    
                echo ($v1->value);
            }
        }
    
    
    }
    

    【讨论】:

      【解决方案3】:

      只需尝试以下代码,该代码旨在根据您的要求为您提供准确的输出。

      $data = file_get_contents( $siteurl.'/json/items.json');
      $values = json_decode($data);
      
      foreach ($values as $key => $value) {
          foreach($value->items as $key1 => $value1){
              foreach($value1 as $key2 => $value2){
                  if($key2=="Item1" && $value2->value>1000){
                       echo $value2->value;
                  }
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2013-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-10
        • 1970-01-01
        • 2015-07-01
        • 1970-01-01
        相关资源
        最近更新 更多