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