次のような配列があるとします。
$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です。
array_count_values を使用して、すべてをカウントした配列を取得してみませんか?
アイデアとしては、検索値を指定するオプションの2番目のパラメーターを使用してarray_keys( $myArray, "" )
を使用できます。次に、結果をカウントします。
$myArray = array( "","","other","","other" );
$length = count( array_keys( $myArray, "" ));
これが速くなるかどうかはわかりませんが、試してみてください:
$counter = 0;
foreach($array as $value)
{
if($value === '')
$counter++;
}
echo $counter;
また、 array_reduce を試して、興味のある値を数えるだけの関数を使用することもできます。例えば
function is_empty( $v, $w )
{ return empty( $w ) ? ($v + 1) : $v; }
array_reduce( $array, 'is_empty', 0 );
ベンチマークによっては、これがarray_count_values()よりも速いかどうかがわかります。
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
通常、空白のみをカウントします。本当にユースケースと必要な速度に依存します。個人的に私は物事を一行で行うのが好きです。
ただし、選択した応答に似ていますが、必要なデータを別の変数に抽出するための行が必要です。
$r = count($x) - count(array_filter($x));