检查数组是否在PHP中具有非null值的最佳方法是什么?

时间:2019-05-12 04:44:50

标签: php

在PHP中,empty([null, null, null])显然将返回false

从性能的角度来看,检测数组仅包含空值的最佳方法是什么?

4 个答案:

答案 0 :(得分:2)

到目前为止,使用此代码对答案进行性能测试,首先使用1000个null值的数组,然后使用999个null值和一个(随机)非null值的数组:

$array = array_fill(0, 1000, null);
$elapsed = array();
foreach (array('Nick1', 'Nick2', 'Eddie', 'Vivek') as $func) {
    $start = explode(' ', microtime());
    for ($i = 0; $i < 10000; $i++) $func($array);
    $elapsed[$func] = elapsed_time($start);
}

在表中,Nick1 = array_reduce,Nick2 = count(array_filter),Vivek = for(又名Nick3)。

结果(所有空数组):

Function    Elapsed Time    Delta
Vivek       0.654           0%
Nick2       0.886           35%
Nick1       0.964           47%
Eddie       3.122           377%

结果(具有999个空值,1个随机非空值,每次迭代均不同的数组)

Function    Elapsed Time    Delta
Vivek       0.305           0%
Nick2       0.888           191%
Nick1       0.891           192%
Eddie       3.114           921%

从全null数组可以看出,for循环要快得多,主要是因为它不会承受每个值的函数调用的开销。对于具有一个非null值的数组,它更快,因为一旦找到非null值就可以破坏。

如果您希望将答案添加到测试中,请发表评论...

答案 1 :(得分:1)

一个选项是使用array_unique获取所有唯一的数组值。如果只有一个元素并且该元素为null,则所有元素均为null。

$unique = array_unique( [null, null, null] );

if ( count( $unique ) === 1 && $unique[0] === null ) {
    //All Null
} else {
    //Not all Null
}

答案 2 :(得分:1)

有两种方法可以确定数组仅包含空值:

$array = array(null, null, null);
echo array_reduce($array, function ($c, $v) { return $c && is_null($v); }, true) ? 'empty' : 'not empty';
echo !count(array_filter($array, function($v) { return !is_null($v); })) ? 'empty' : 'not empty';

输出:

empty
empty

当然,我们还有谦虚的for循环:

$c = count($array);
for ($i = 0; $i < $c; $i++) {
    if (!is_null($array[$i])) {
        echo "not empty";
        break;
    }
}
if ($i == $c) echo "empty";

Demo on 3v4l.org

答案 3 :(得分:1)

<strong>TPI</strong> +2573<br>
<strong>NM$</strong> +719<br>
<strong>Молоко</strong> +801<br>
<strong>Прод. жизнь</strong> +6.5<br>
<strong>Оплод-сть</strong> +3.6<br>
<strong>Л. отела</strong> 6.3/3.9<br>
<strong>Вымя</strong> +1.48<br>
<strong>Ноги</strong> +1.61<br>