在PHP中解析解码的JSON

时间:2013-09-04 19:48:39

标签: php json

我成功地在PHP中解码了一些JSON(不像我想的那么痛苦),但是自从我做了任何真正的PHP之后已经有很长一段时间了,我的大脑在下面写了一个空白。

解码的json看起来像这样

[Array]
item {
      [0]
      {
         [live]=>
         [name]=>Paul
         [value]=>10
      }
      [1]
      {
         [live]=>1
         [name]=>Fred
         [value]=>32
      }

等等

我遇到的问题是这个 - 我正在尝试迭代结构以首先测试如果live == 1然后如果它是第一个实时名称,则将其作为选定值输出到HTML下拉列表

我目前正在尝试这样

$t = 0;
$count = 0;
foreach($decode['items'] as $option=>$value)
{
print_r("option = $option\n");
    if ($option=>isLive == 1)   
{
    print_r("isLive is true for $option[$count]['names']\n");
        if ($t == 0)
        {
        echo "<option value=$option[name] selected>$value[name]</option>";
        $t = 1;
    }
    else
        echo "<option value=$option[name]>$value[name]</option>";
    }  
    else 
    {
    print_r("isLive is false for $option[$count]=>name\n");
    }
    $count++;
}

问题是我似乎无法使if语句正确起作用。这可能是一个非常简单的问题,毫无疑问会让我面对手掌,但我可以在这里用正确的方向做指针!

2 个答案:

答案 0 :(得分:0)

如果json就像你向我们展示的那样你就不能用foreach迭代任何东西,因为你的数组不包含名为items的键。

使用提供的结构,这应该可以解决问题:

foreach($decode["item"] as $item) {
    if($item->live == 1) {
        ...
    } else {
        ...
    }
}

如果$item不是对象,请改用$item['live']

P.S。:你应该真的打开error_reporting。 $option=>isLive没有有效的语法。

答案 1 :(得分:0)

$t = 0;
$count = 0;

$arr = json_decode($json,true);
foreach($arr as $key=>$val)
{
  print_r($key);
  if($val['live'])
  {
   if($t == 0)
   {
     echo '<option value='.$val['name'].' selected>'.$val['name'].'</option>';
     $t = 1;
   }
   else
   {
     echo '<option value='.$val['name'].'>'.$val['name'].'</option>';
   }
  }
  else
  {
    echo $key.' not printed cause it hasn\'t live set to true';
  }
  $count++;
}