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