配列中の指定された値を持つ値の個数を数える

このような配列があるとします。

$array = array('', '', 'other', '', 'other');

指定された値(例では空白)を持つ数を数えるにはどうしたらよいですか?

そして、それを効率的に行うには?(数百の要素を持つ十数個の配列について) この例はタイムアウトします(30秒以上)。

function without($array) {
    $counter = 0;
    for($i = 0, $e = count($array); $i < $e; $i++) {
        if(empty($array[$i])) {
            $counter += 1;
        }
    }
    return $counter;
}

この場合、空白の要素数は3です。

ソリューション

array_count _values]1を使って、すべてをカウントした配列を取得するのはどうでしょうか。

解説 (1)

ただ、アイディアとしては、array_keys( $myArray, "" ) を使って、オプションの第二パラメータで検索値を指定することができます。そして、結果を数えます。

$myArray = array( "","","other","","other" );
$length  = count( array_keys( $myArray, "" ));
解説 (2)

この方法がより速いかどうかは分かりませんが、試してみる価値はあると思います。

$counter = 0;
foreach($array as $value)
{
  if($value === '')
    $counter++;
}
echo $counter;
解説 (0)