Ответ Павла не совсем сработал. Модифицированный код ниже, который работает для меня на
msvcrt
работает в git-bash. (Я отправляю новый ответ, потому что редактирование ответа Павла напрямую изменит его из python 2 .x -> 3.x, что кажется слишком большим для редактирования (py2 все еще используется)
import sys, time, msvcrt
def readInput( caption, default, timeout = 5):
start_time = time.time()
sys.stdout.write('%s(%s):'%(caption, default))
sys.stdout.flush()
input = ''
while True:
if msvcrt.kbhit():
byte_arr = msvcrt.getche()
if ord(byte_arr) == 13: # enter_key
break
elif ord(byte_arr) >= 32: #space_char
input += "".join(map(chr,byte_arr))
if len(input) == 0 and (time.time() - start_time) > timeout:
print("timing out, using default value.")
break
print('') # needed to move to next line
if len(input) > 0:
return input
else:
return default
# and some examples of usage
ans = readInput('Please type a name', 'john')
print( 'The name is %s' % ans)
ans = readInput('Please enter a number', 10 )
print( 'The number is %s' % ans)
Как насчет использования array_count _values , чтобы получить массив со всем, что для вас рассчитано?
Я не знаю, будет ли это быстрее, но стоит попробовать:
$counter = 0;
foreach($array as $value)
{
if($value === '')
$counter++;
}
echo $counter;
Мы используем функцию 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
function arrayvaluecount($array) {
$counter = 0;
foreach($array as $val){
list($v)=$val;
if($v){
$counter =$counter+1;
}
}
return $counter;
}
Обычно только для подсчета пробелов. Действительно зависит от варианта использования и необходимой скорости. Лично мне нравится делать вещи одной строкой.
Как и в случае с выбранным ответом, но вам все еще нужна строка для извлечения данных, необходимых для другой переменной.
$r = count($x) - count(array_filter($x));
Просто идея, вы можете использовать array_keys( $myArray, "" )
, используя необязательный второй параметр, который определяет значение поиска. Затем посчитайте результат.
$myArray = array( "","","other","","other" );
$length = count( array_keys( $myArray, "" ));
Вы также можете попробовать array_reduce , с функцией, которая будет просто подсчитывать интересующее вас значение. Например,
function is_empty( $v, $w )
{ return empty( $w ) ? ($v + 1) : $v; }
array_reduce( $array, 'is_empty', 0 );
Некоторые тесты могут сказать вам, быстрее ли это, чем array_count_values ()