考虑:
[name] => Array ( [1] => name#1
[2] => name#2
[3] => name#3
[4] => name#4
[5] =>
[6] =>
[7] =>
[8] =>
[9] =>
)
$name = $_POST['name']
我希望结果为4
。
count ($name) = 9
count (isset($name)) = 1
count (!empty($name)) = 1
我认为最后一个会完成我需要的东西,但事实并非如此(空条目来自表单上未填充的输入)。
答案 0 :(得分:103)
您可以使用array_filter仅保留数组中非空的值,如下所示:
array_filter($array);
或者,如果您的过滤功能更复杂:
array_filter($array, function($x) { return !empty($x); });
# function(){} only works in in php >5.3, otherwise use create_function
所以,只计算非空:
count(array_filter($array));
答案 1 :(得分:21)
count(array_filter($name));
答案 2 :(得分:1)
这是一个简单的计算函数:
function non_empty(array $a) {
return array_sum(array_map(function($b) {return empty($b) ? 0 : 1;}, $a));
}
如果您的表单处理函数需要它们,这将保留数组索引,例如当您将名称上的第三个输入与另一个输入集的第三个值相关联时,它们之间存在空输入。
答案 3 :(得分:1)
可能的解决方案:首先您需要从数组中删除空/空、假和零值,然后计算数组的剩余值
如果不需要从数组中删除零值,而是删除空值和假值
count(array_filter($arrayName, 'strlen'));
//"strlen" use as second parameter if you no need to remove zero '0' values
如果您需要从数组中删除零值、空值和假值
count(array_filter($arrayName));