PHP foreach在空时抛出错误

时间:2012-10-06 18:02:20

标签: php

我有JSON脚本返回一些数据,但有时它是空的,我的foreach循环抛出错误,当它在这里为空时是我的代码

<?php
$planItems = getJSON('getPlanItems');
foreach ((array)$planItems->items as $item){
?>

我注意到它是因为

  

$ planItems-&GT;项

删除 - &gt;并没有抛出错误,但后来我无法从JSON数据中正确读取结果。

有没有解决这个问题?

3 个答案:

答案 0 :(得分:2)

当然,$planItems->items未设置或不是数组时出错。这不是很方便,但这就是foreach的作用。为防止这种情况,您需要在循环之前进行检查,例如:

if (isset($planItems->items) && is_array($planItems->items)) {
    foreach ($planItems->items as $item) {
        // ....
    }
}

答案 1 :(得分:1)

你有一个好鼻子,确实有问题的部分是:

$planItems->items

仅当$planItems是一个对象且拥有items成员时才会有效。你需要首先检查一下,很可能是你错过了检查getJSON的错误条件的返回值。

$planItems = getJSON('getPlanItems');

if ($planItems === ???) { # do your error condition checking here
    throw new UnexpectedValueException('Remove Json Request error.');
}

如果您为代码添加了正确的错误处理,问题就会消失。

答案 2 :(得分:0)

您可以使用json_decode PHP函数将JSON转换为数组,第二个参数为true。然后在foreach写条件if (!empty($planItems ))

之前

这将是

<?php
$planItems = json_decode(getJSON('getPlanItems'),true);
if (!empty($planItems['items'] ))
foreach ($planItems['items'] as $item){
?>