web-dev-qa-db-ja.com

指定された値を持つ配列内の値の数をカウントします

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

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

特定の値(この例では空白)で数値をカウントするにはどうすればよいですか?

そして、それは効率的に行われますか? (それぞれ数百の要素を持つ約12個の配列の場合)この例はタイムアウトします(30秒以上):

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

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

22
Tom

array_count_values を使用して、すべてをカウントした配列を取得してみませんか?

35
Cellfish

アイデアとしては、検索値を指定するオプションの2番目のパラメーターを使用してarray_keys( $myArray, "" )を使用できます。次に、結果をカウントします。

$myArray = array( "","","other","","other" );
$length  = count( array_keys( $myArray, "" ));
28
Sampson

これが速くなるかどうかはわかりませんが、試してみてください:

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

また、 array_reduce を試して、興味のある値を数えるだけの関数を使用することもできます。例えば

function is_empty( $v, $w )
{ return empty( $w ) ? ($v + 1) : $v; }

array_reduce( $array, 'is_empty', 0 );

ベンチマークによっては、これがarray_count_values()よりも速いかどうかがわかります。

3
Steve

Array_filter関数を使用して、配列内の値の数を見つけます

$array=array('','','other','','other');
$filled_array=array_filter($array);// will return only filled values
 $count=count($filled_array);
echo $count;// returns array count
2
Bhushan Rana

通常、空白のみをカウントします。本当にユースケースと必要な速度に依存します。個人的に私は物事を一行で行うのが好きです。

ただし、選択した応答に似ていますが、必要なデータを別の変数に抽出するための行が必要です。

$r = count($x) - count(array_filter($x));
2
Darren