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

22

让我们来举几个例子:

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

有什么巧妙的方法可以规避这个函数?

7个回答

37

尝试使用in_array函数:

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

3
@stereofrog,请查看PHP文档,除非您将true作为第三个参数传递,否则in_array将执行宽松比较,因此对于array("Paul", 0, "Daniel")array("Paul", "", "Daniel")array("Paul", false, "Daniel")将得到相同的结果。因此,如果操作者只想匹配空字符串,则可以将true作为第三个参数传递。 - Jack Murdoch
@stereofrog 0实际上是一个数字,因此它不是一个空字符串。 - CodeOverload
@stereofrog @David 如果你不想在数组中有0的情况下返回false,并且仅在空字符串时返回,只需将true作为第三个参数传递即可。 - Jack Murdoch

33
答案取决于你如何定义“空”。
$contains_empty = count($array) != count(array_filter($array));

这个检查空元素的boolean sense。要检查空字符串或equivalents,请使用以下方法

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

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

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

超级聪明的方法,可以节省几行代码来检查数组中值的存在! - mmmpop

8

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

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

$array = array("Paul", "", "Daniel");
if($array != array_filter($array)) {
    echo "Array contains empty values.";
}

1
能稍微解释一下吗? - Shamseer Ahammed
这非常漂亮和简单明了!+1 - Aaron Marton
@ShamseerAhammed 所以 array_filter 将删除“false”(=空)的实体,并将不含空元素的数组返回到原始数组。这意味着如果数据与原始数组不相等,则该数组包含空值。 - Melroy van den Berg

5
function has_empty(array $array)
{
    return count($array) != count(array_diff($array, array('', null, array())));
}

1
function testEmpty($array) {
  foreach ($array as $element) {
    if ($element === '')
      return false;
  }
  return true;
}

请查看下面的评论以获取更多信息。

2
根据您对“空”元素的定义,您可能希望查看if(empty($element))而不是if($element == "")。empty()将""、false、0、null(以及可能还有其他一些)视为空元素。 - sbrattla
@sbrattla 我只回答了那个具体的问题,但你说得对,你的回答更全面。 - SteeveDroz
1
@Oltatus:我的意图不是要纠正你的建议,而是提供另一种解决方案 :-) empty()函数并不总是一个好选择,特别是当数组是一个包含true/false值的数组时。在这种情况下,所有的“false”值都将被过滤掉。 - sbrattla

1

虽然不是完全回答问题的答案,但是许多访问者来到这里是为了寻找解决这个略微不同情况的方法:

检查数组是否仅包含空字符串

使用implode()可以得出一个简单的解决方案,适用于某些需求。

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

0

既然我喜欢一些花哨的匿名函数,这是我的看法。不确定性能如何,但就是这样:

$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

愿你们都能找到自己寻求的幸福。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接