让我们来举几个例子:
array("Paul", "", "Daniel") // false
array("Paul", "Daniel") // true
array("","") // false
有什么巧妙的方法可以规避这个函数?
让我们来举几个例子:
array("Paul", "", "Daniel") // false
array("Paul", "Daniel") // true
array("","") // false
有什么巧妙的方法可以规避这个函数?
$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);
因此,array_filter()
将从数组中移除空元素,然后返回该数组。
将返回的数组与原始数组进行比较是不同的。
这意味着该数组包含一个或多个空元素。
$array = array("Paul", "", "Daniel");
if($array != array_filter($array)) {
echo "Array contains empty values.";
}
array_filter
将删除“false”(=空)的实体,并将不含空元素的数组返回到原始数组。这意味着如果数据与原始数组不相等,则该数组包含空值。 - Melroy van den Bergfunction 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
。
愿你们都能找到自己寻求的幸福。
true
作为第三个参数传递,否则in_array
将执行宽松比较,因此对于array("Paul", 0, "Daniel")
、array("Paul", "", "Daniel")
或array("Paul", false, "Daniel")
将得到相同的结果。因此,如果操作者只想匹配空字符串,则可以将true
作为第三个参数传递。 - Jack Murdochfalse
,并且仅在空字符串时返回,只需将true
作为第三个参数传递即可。 - Jack Murdoch