确定PHP数组中的所有值是否为空

时间:2015-06-15 11:01:42

标签: php arrays

我正在寻找性能最友好的方法来检查数组中的所有值是否为null,或者它是否至少有一个元素与其他类型。

即。我需要一个名为containsOnlyNull($ array)的方法,它根据传递的数组返回布尔值

e.g。 :

$a = containsOnlyNull([null,null,null,null,null]);
$b = containsOnlyNull([null,null,1,null,null]);

// $a will be true
// $b will be false

任何建议将不胜感激:)

6 个答案:

答案 0 :(得分:7)

function containsOnlyNull($input)
{
    return empty(array_filter($input, function ($a) { return $a !== null;}));
}

答案 1 :(得分:4)

我喜欢使用array_reduce。此方法计算非null项,如果大于0,则返回false。否则,它返回true。

function containsOnlyNull($arr) {
    return array_reduce($arr, function($carry, $item) {
        return $carry += (is_null($item) ? 0 : 1);
    }, 0) > 0 ? false : true;
}

演示: IDEOne

答案 2 :(得分:3)

你可以简单地使用php的array_filter函数作为

function containsOnlyNull($args){
    return count(array_filter($args,function($v){return $v !== null;})) === 0;
}

$a = containsOnlyNull([null,null,null,null,null]);
$b = containsOnlyNull([null,null,1,null,null]);

echo $a."<br>";
echo $b;

Fiddle

答案 3 :(得分:0)

您可以将数组直接简化为布尔值:

array_reduce($payload, function (bool $acc, $value) {
    return !$acc ? $acc : $value === null;
}, true);

答案 4 :(得分:0)

由于您的主要目标是“对性能最友好”,因此您需要设计一个能够“短路”或 break/{{1} } 早期的。否则,在确定存在非空值后,您将进行不必要的迭代(所有函数式迭代技术都是如此)。尽管在某些开发人员看来很无聊,但经典循环提供了提前中断的能力。这个任务可以用单线完成吗?是的,但它不会胜过这个片段。

代码:(Demo)

return

输出:

function containsOnlyNull(array $array): bool
{
    foreach ($array as $value) {
        if ($value !== null) {
            return false;
        }
    }
    return true;
}

echo 'a: ' . var_export(containsOnlyNull([null,null,null,null,null]), true);  // 5 iterations for true outcome
echo "\n";
echo 'b: ' . var_export(containsOnlyNull([null,null,1,null,null]), true);  // 3 iterations for false outcome

答案 5 :(得分:-1)

empty($array)

这应该返回True