计算数组中重复的空值

时间:2019-12-29 10:31:44

标签: php arrays

我有一个像这样的数组:

$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));

我正在尝试了解更多更好的解决方案。

4 个答案:

答案 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));

演示:https://3v4l.org/TOHdP

答案 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表示严格比较(===)