如何计算PHP数组中的非空条目?

2022-08-30 09:19:55

考虑:

[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

我认为最后一个会完成我需要的东西,但事实并非如此(空条目来自表单上未填充的输入)。


答案 1

您可以使用array_filter来仅保留数组中“真实”的值,如下所示:

array_filter($array);

如果您明确只想要非,或者您的过滤器函数更复杂:empty

array_filter($array, function($x) { return !empty($x); });
# function(){} only works in in php >5.3, otherwise use create_function

因此,仅对非空项目进行计数,就像调用每个项目一样:empty(item)

count(array_filter($array, function($x) { return !empty($x); }));

但是,由于只是“变量已设置且值是真实的”的简写,因此您并没有真正从中获得任何东西,因为如果您的数组包含诸如 或 之类的值,那么这些值也会算作空,与对 的普通调用相同。empty()FALSE"0"array_filter

更好的方法是明确要计数的内容,例如,如果您只想排除空字符串,请使用:

array_filter($array, function($x) { return ($x !== ""); });

答案 2
count(array_filter($name));