web-dev-qa-db-ja.com

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

最後の1つで必要なことを達成できると思いますが、そうではありません(空のエントリはフォーム上の未入力からのものです)。

49
Damon

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));
106
moeffju
count(array_filter($name));
22
Matt Huggins

簡単な計算関数を次に示します。

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

名前の3番目の入力を別の入力セットの3番目の値に関連付け、それらの間に空の入力がある場合など、フォーム処理関数で必要な場合、これにより配列インデックスが保持されます。

1
jmz