How to count non-empty entries in a PHP array?

Consider:

[name] => Array ( [1] => name#1
                  [2] => name#2
                  [3] => name#3
                  [4] => name#4
                  [5] =>
                  [6] =>
                  [7] =>
                  [8] =>
                  [9] =>
                )


$name = $_POST['name']

I want the result to be 4.

count ($name) = 9
count (isset($name)) = 1
count (!empty($name)) = 1

I would think that last one would accomplish what I need, but it is not (the empty entries are from unfilled inputs on the form).


You can use array_filter to only keep the values that are “truthy” in the array, like this:

array_filter($array);

If you explicitly want only non-empty, or if your filter function is more complex:

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

So, to count only non-empty items, the same way as if you called empty(item) on each of them:

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

count(array_filter($name));

Possible Solution: First you need to remove empty/null, false and zero values from an array and then count remaining values of an array

If you no need to remove zero values from an array, but remove null and false values

count(array_filter($arrayName, 'strlen'));
//"strlen" use as second parameter if you no need to remove zero '0' values

if you need to remove zero, null and false values from an array

count(array_filter($arrayName));

Here's a simple calculation function:

function non_empty(array $a) {
    return array_sum(array_map(function($b) {return empty($b) ? 0 : 1;}, $a));
}

This will preserve array indexes if your form handling function needs them, like when you're associating the third input on name to the third value of another input set, and there are empty inputs in between them.