如何检查数组是否包含空元素


How to check if an array contains empty elements?

让我们举几个例子:

array("Paul", "", "Daniel") // false
array("Paul", "Daniel") // true
array("","") // false

围绕这个功能,有什么巧妙的方法?

尝试使用in_array:

return !in_array("", array("Paul", "", "Daniel")); //returns false

答案取决于如何定义"空">

$contains_empty = count($array) != count(array_filter($array));

这将检查布尔意义上的空元素。检查空字符串或等效

$contains_empty = count($array) != count(array_filter($array, "strlen"));

只检查空字符串(注意第三个参数(:

$contains_empty = in_array("", $array, true);

因此array_filter()将从数组中移除空元素,然后返回此数组。

将返回的数组与原始数组进行比较将不相同
意味着数组包含一个或多个空元素。

$array = array("Paul", "", "Daniel");
if($array != array_filter($array)) {
    echo "Array contains empty values.";
}
function has_empty(array $array)
{
    return count($array) != count(array_diff($array, array('', null, array())));
}
function testEmpty($array) {
  foreach ($array as $element) {
    if ($element === '')
      return false;
  }
  return true;
}

请查看下面的评论以了解更多信息。

不是这个问题的确切答案,但许多访问者来到这里是为了寻找这个略有不同的情况的解决方案:

检查,如果数组仅包含空字符串

这将是一个简单的implode()解决方案,适合的一些需求

function testIfEmpty($array) {
    $flat = implode('', $array);
    return !empty($flat):
}

由于我确实喜欢一些花哨的匿名函数,下面是我对它的看法。不确定性能,但它是:

$filter = array_filter(
        ["Paul", "", "Daniel"],
        static function ($value) {
            return empty($value); // can substitute for $value === '' or another check
        }
    );
return (bool) count($filter);

逻辑解释。如果匿名返回true,则表示它找到了一个空值。这意味着过滤器数组的末尾将只包含空值(如果有(。

这就是为什么返回使用count函数检查过滤器数组是否有值的原因。

(bool)类型的强制转换等效于return count($filter) === 0

愿你们都能找到你们所追求的幸福。