Ответ 1
Как насчет использования array_count _values , чтобы получить массив со всем, что подсчитано для вас?
Скажем, у меня есть такой массив:
$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 , чтобы получить массив со всем, что подсчитано для вас?
Просто идея, вы можете использовать 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 с функцией, которая просто подсчитает интересующее вас значение. eg
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));
function arrayvaluecount($array) {
$counter = 0;
foreach($array as $val){
list($v)=$val;
if($v){
$counter =$counter+1;
}
}
return $counter;
}
function countarray($array)
{ $count=count($array);
return $count;
}
$test=$array = array('', '', 'other', '', 'other');
echo countarray($test);