我有一个像这样的数组:
$items = ['a', 'b', null, null];
我要在2
这个数组中计数[null]。
但是:无需即可替换它们,然后再使用。像这样:
$items = array_replace($items,array_fill_keys(array_keys($items, null),''));
array_count_values($items);
并且:无需从阵列中将其删除,而是将其从总数中删除。像这样:
count($items) - count(array_filter($items));
我正在尝试了解更多更好的解决方案。
答案 0 :(得分:4)
您可以array_filter
输入空值,而count
输入结果一次:
count(array_filter($items, function ($item) { return $item === null; }))
或在PHP 7.4中:
count(array_filter($items, fn($item) => $item === null));
答案 1 :(得分:1)
您可以使用array_count_values
方法。您可以像这样使用它:
-解决方案1
$items = ['a', 'b', null, null];
$counts = 0;
foreach(array_count_values($items) as $item => $counter){
$counts += $counter;
}
echo count($items) - $counts;
PS:array_count_values()
仅计算字符串和整数。
-解决方案2
或者您可以使用array_filter
创建null
值数组并对其进行计数。
echo count(array_filter($items, function ($item) {
return $item === null;
}))
答案 2 :(得分:1)
通常最好是明确表示,因此只需遍历输入数组并计数:
<?php
$items = ['a', 'b', null, null];
array_walk($items, function($value) use (&$count) {
if ($value === null)
$count++;
});
var_dump($count);
输出显然是:
int(2)
答案 3 :(得分:0)
不需要array_filter
$items = ['a', 'b', null, null];
echo(count(array_keys($items, null, true))); // Output: 2
请注意,如果只希望计算
null
,则第三个参数必须为 true ,因为true表示严格比较(===)