web-dev-qa-db-fra.com

Comment compter les entrées non vides dans un tableau PHP?

Considérer:

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


$name = $_POST['name']

Je veux que le résultat soit 4.

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

Je pense que le dernier accomplirait ce dont j'ai besoin, mais ce n'est pas le cas (les entrées vides proviennent d'entrées non remplies sur le formulaire).

49
Damon

Vous pouvez utiliser array_filter pour ne conserver que les valeurs non vides dans le tableau, comme ceci:

array_filter($array);

Ou si votre fonction de filtrage est plus complexe:

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

Donc, pour ne compter que les non vides:

count(array_filter($array));
106
moeffju
count(array_filter($name));
22
Matt Huggins

Voici une fonction de calcul simple:

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

Cela préservera les index de tableau si votre fonction de gestion de formulaire en a besoin, comme lorsque vous associez la troisième entrée de nom à la troisième valeur d'un autre ensemble d'entrées et qu'il y a des entrées vides entre elles.

1
jmz