我经常遇到这样的情况:处理可以是数组或空变量的数据,并将这些数据提供给一些foreach。

$values = get_values();

foreach ($values as $value){
  ...
}

当你给foreach提供不是数组的数据时,你会得到一个警告:

警告:在[…]中为foreach()提供的参数无效

假设不可能重构get_values()函数以总是返回一个数组(向后兼容,没有可用的源代码,无论其他原因),我想知道哪种是避免这些警告的最干净和最有效的方法:

将$值转换为数组 初始化数组的$values 用if包foreach 其他(请建议)


当前回答

如果get_value()为空,那么定义一个空数组作为回退呢? 我想不出一条最短的路。

$values = get_values() ?: [];

foreach ($values as $value){
  ...
}

其他回答

这似乎也与环境有关:

我有“无效参数提供foreach()”错误仅在开发环境中,但不在prod(我在服务器上工作,而不是localhost)。

尽管有错误,但var_dump指示数组在那里(在app和dev两种情况下)。

围绕foreach ($array as $subarray)的if (is_array($array))解决了这个问题。

对不起,我不能解释原因,但我花了一段时间来找出解决方案,我想更好地分享这作为一个观察。

$values = get_values();

foreach ((array) $values as $value){
  ...
}

问题总是空的,铸造实际上是解决方案。

为foreach()提供的显示tweet的无效参数警告。 进入/wp-content/plugins/display-tweets-php。 然后把这段代码插入591行,它就能正常运行了。

if (is_array($tweets)) {
    foreach ($tweets as $tweet) 
    {
        ...
    }
}

就我个人而言,我认为这是最干净的-不确定它是否是最有效的,注意!

if (is_array($values) || is_object($values))
{
    foreach ($values as $value)
    {
        ...
    }
}

我偏爱的原因是,当你没有任何开始时,它不会分配一个空数组。

我将使用empty, isset和is_array的组合as

$array = ['dog', 'cat', 'lion'];

if (!empty($array) && isset($array) && is_array($array) {
    //loop
    foreach ($array as $values) {
        echo $values; 
    }
}