2012-06-13 3 views

ответ

44

Этого можно легко достичь с помощью регулярного выражения.

function countDigits($str) 
{ 
    return preg_match_all("/[0-9]/", $str); 
} 

Функция возвращает количество раз, когда шаблон был найден, что в данном случае является любой цифрой.

+0

Это даже лучше :) –

+11

заметьте, что третий параметр только не является обязательным, так как 5.4, так чтобы быть уверенным, лучше добавить значение получить матчи. см. http://www.php.net/manual/en/function.preg-match-all.php –

+0

Как я могу сделать, если только хочу посчитать много раз, повторяется число 4? – ras212

0

Эта функция проходит через заданную строку и проверяет каждый символ, чтобы увидеть, является ли оно числовым. Если это так, он увеличивает количество цифр, а затем возвращает их в конце.

function countDigits($str) { 
    $noDigits=0; 
    for ($i=0;$i<strlen($str);$i++) { 
     if (is_numeric($str{$i})) $noDigits++; 
    } 
    return $noDigits; 
} 
7

первый split your string, следующий filter результат до only include numeric символов, а затем просто count полученных элементов.

<?php 

$text="12aap33"; 
print count(array_filter(str_split($text),'is_numeric')); 

изменения: добавлен тест из любопытства: (петля из выше 1000000. строки и подпрограмм)

preg_based.php является preg_match_all раствор overv в

[email protected]_Gate:~$ time php filter_based.php 

real 0m20.147s 
user 0m15.545s 
sys  0m3.956s 

[email protected]_Gate:~$ time php preg_based.php 

real 0m9.832s 
user 0m8.313s 
sys  0m1.224s 

регулярное выражение явно выше. :)

+0

Спасибо, что запустили цифры (каламбур) на этом. –

+0

поддерживается для запуска чисел. – Lizardx

4

< Для PHP 5.4:

function countDigits($str) 
{ 
    return count(preg_grep('~^[0-9]$~', str_split($str))); 
} 
Смежные вопросы