Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP@foreach警告_Php - Fatal编程技术网

PHP@foreach警告

PHP@foreach警告,php,Php,我有一个来自数组的PHP foreach,该数组是由我的DB提供者通过soap web服务提供给我的,因此我无法更改我得到的数组。当没有要返回的元素时,我得到一个空数组,这将导致 Warning: Invalid argument supplied for foreach() 这个循环看起来像 foreach (($point1['return']) as $val) 我可以在哪里放置@来停止此警告,如果我不能,我该怎么做才能关闭php警告。空数组不会导致此错误,问题是您试图通过不是数组的

我有一个来自数组的PHP foreach,该数组是由我的DB提供者通过soap web服务提供给我的,因此我无法更改我得到的数组。当没有要返回的元素时,我得到一个空数组,这将导致

Warning: Invalid argument supplied for foreach()
这个循环看起来像

foreach (($point1['return']) as $val) 

我可以在哪里放置@来停止此警告,如果我不能,我该怎么做才能关闭php警告。

空数组不会导致此错误,问题是您试图通过不是数组的内容进行迭代。您可以使用函数添加检查。

隐藏警告不是正确的方法。您应该检查它是否存在并且是否是数组

if (is_array($point1['return'])) {
    foreach ($point1['return'] as $val)  {
         ...
    }
}

实际上,99%的情况下,关闭警告或使用@operator不是正确的方法


解决问题而不是隐藏问题。首先检查数组:

if(is_array($point1['return']))
{
...
}

最好让错误显示,但首先检查输入是否为数组。因此,您可以将foreach封装在if中,如下所示:

if ((is_array($point1)) && (is_array($point1['return']))) {
    foreach (($point1['return']) as $val) 
    ...
}

检查这是否实际上是一个数组。具有 没有必要取消显示警告。 事实上,无法抑制无效参数警告。

foreach()不仅可以处理,还可以使用默认的“所有可见属性”实现或通过/接口的自定义实现来处理。
“通过soap web服务的DB提供者”是指(突然)有一个对象/迭代器而不是普通数组的可能性 因此,如果要在将变量传递给FURACH之前测试存在性和数据类型,则不仅要考虑测试,还要考虑./P>
您还可以显式地将参数强制转换为数组:

foreach ((array) $point1['return'] as $val)  {

注意:如果
$point1

中没有“return”键,这仍然会发出未定义的索引,请将其粘贴到函数文件中:

set_error_handler(function($errno, $errstr){
     if(stristr($errstr,'Invalid argument supplied for foreach()')){
        return true;
    }
        return false;
});
set_error_handler(function($errno, $errstr){
     if(stristr($errstr,'Invalid argument supplied for foreach()')){
        return true;
    }
        return false;
});