PHP foreach在为空时抛出错误

PHP foreach在为空时抛出错误,php,Php,我有返回一些数据的JSON脚本,但有时它是空的,当我的代码为空时,我的foreach循环抛出一个错误 <?php $planItems = getJSON('getPlanItems'); foreach ((array)$planItems->items as $item){ ?> 我注意到它是因为 <?php $planItems = getJSON('getPlanItems'); foreach ((array)$planItems->items as

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

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

我注意到它是因为

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

<?php
$planItems = getJSON('getPlanItems');
foreach ((array)$planItems->items as $item){
?>
删除->不会抛出错误,但是我无法从JSON数据中正确读取结果

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

有没有办法解决这个问题?

您可以使用带有第二个参数true的PHP函数将JSON转换为数组。然后在foreach写入条件
之前,如果(!empty($planItems))

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

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


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

<?php
$planItems = getJSON('getPlanItems');
foreach ((array)$planItems->items as $item){
?>
if (isset($planItems->items) && is_array($planItems->items)) {
    foreach ($planItems->items as $item) {
        // ....
    }
}

你的嗅觉很好,问题在于:

<?php
$planItems = getJSON('getPlanItems');
foreach ((array)$planItems->items as $item){
?>
$planItems->items
只有当
$planItems
是一个对象并且具有
items
成员时,这才有效。您需要首先检查,很可能您没有检查
getJSON
中的返回值以了解错误条件

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

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

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

这是函数getJSON吗?它看起来像一个javascript函数。可能去掉(数组)什么是
var_dump(getJSON('getPlanItems')?它不仅仅是一个php函数。删除(数组)会导致相同的错误。注意:尝试获取非object的属性如果在开始迭代之前检查JSON脚本是否返回了空数据,会发生什么情况?您是否查看了:错误:转换到数组也适用于许多其他情况。但是为什么要转换到数组?或者它已经是一个数组,在这种情况下,您可以迭代;或者不是,在这种情况下,迭代没有意义。对数组进行强制转换可能有效,但它并不能真正传达意图——我们真的不想转换任何东西;当且仅当该特定值存在且为数组时,我们希望迭代。是的,我想检查数组,但我认为可能有更简单的方法。因为我有很多朋友loops@tdammers当前位置op想要。我认为应该用更清楚的措词和更好的指向:所以像dev这样的东西建议检查数组是否为空?如果(!empty($planItems))或检查数组是否大于0,则不会导致使用
foreach
时出现任何问题。但无论如何,在foreach的
会议上,已经太晚了。调用
getJSON
后,需要检查post条件。首先进行错误检查。如果getJson进行远程交互,当远程关闭或无法访问时,您会怎么做?函数将返回什么?if(count($array)>0似乎可以像某人建议的那样正常工作。我希望这是一种更简单的方法。我不想添加if(count($array)>0到我所有的foreach,但我想没有其他方法不需要。如果
$array
是一个数组,并且
count
的值为0,那么
foreach
将有0次迭代。因此,你不需要关心这种情况。对不起,我不明白你的意思。我的函数使用php的file\u get\u内容获取文件内容返回encode json的脚本。然后我的函数返回decode json。因此,我的脚本
if(count($planItems)>0){foreach($planItems->items as$item)
因此,如果数组大于0,它将运行循环,否则我将执行其他操作。我仍然不明白为什么我不需要
count
我的函数已返回解码的json。我将尝试使用if(!empty($planItems))如果已经对其进行了解码,则不应在foreach中解析为数组。此外,您使用的对象类似于
->items
,祝您好运。$planItems['items']Doesn似乎不起作用抛出了一个错误致命错误:无法将stdClass类型的对象用作arrayThat's,因为您没有使用json_decode,而您的函数正在这样做。我不知道,怎么做?
<?php
$planItems = getJSON('getPlanItems');
foreach ((array)$planItems->items as $item){
?>