0

我已经成功地在 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 语句正确以使其正常工作。这可能是一个非常简单的问题,毫无疑问会让我面对手掌,但我可以在这里使用指向正确方向的指针!

4

2 回答 2

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++;
}
于 2013-09-04T19:55:56.233 回答
0

如果 json 就像您向我们展示的那样,您无法使用 foreach 迭代任何内容,因为您的数组不包含名为items.

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

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

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

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

于 2013-09-04T19:54:11.643 回答