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