在PHP中,empty([null, null, null])
显然将返回false
。
从性能的角度来看,检测数组仅包含空值的最佳方法是什么?
答案 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";
答案 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>