2010-12-12 8 views
42

Tenir compte:Comment compter les entrées non-vides dans un tableau PHP?

[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 la dernière serait accomplir ce que j'ai besoin, mais ce n'est pas (les entrées vides sont des entrées non remplies sur le formulaire).

Répondre

84

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

array_filter($array); 

Ou si votre fonction de filtre 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 non-vide:

count(array_filter($array)); 
19
count(array_filter($name)); 
+11

Notez que cela ne renvoie pas seulement des éléments vides, mais que chaque élément dont la valeur est [égal à 'false'] (http://php.net/manual/fr/language.types.boolean.php#language.types. boolean.casting) (c'est-à-dire '" "', 'null',' 0', 'false',' "0" '). – Gumbo

1

est ici une simple fonction de calcul:

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

Cela permettra de préserver les indices de tableau si les besoins de votre fonction de gestion des formulaires, comme lorsque vous associer la troisième entrée sur le nom à la troisième valeur d'un autre ensemble d'entrée, et sont des entrées vides entre eux.

Questions connexes