2010-12-12 40 views
42

考慮:如何計算PHP數組中的非空條目?

[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 

我認爲,最後一個將完成我所需要的,但它不是(空項是從形態上未填充輸入)。

回答

84

您可以使用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)); 
19
count(array_filter($name)); 
+11

請注意,這不僅僅返回空元素,而且每個元素的值都是[等於'false'](http://php.net/manual/en/language.types.boolean.php#language.types。 boolean.casting)(即''''','null','0','false','「0」')。 – Gumbo 2010-12-12 17:35:29

1

這裏有一個簡單的計算功能:

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

這將保留數組的索引,如果你的表單處理功能需要他們,當你的名字相關聯的第三輸入到另一個輸入組的第三個值等,還有在他們之間是空的輸入。