Je recherchais une fonction PHP rapide qui, à partir d’une chaîne, compterait le nombre de caractères numériques (c’est-à-dire les chiffres) dans cette chaîne. Je ne pouvais pas en trouver un, y a-t-il une fonction pour le faire?
Cela peut facilement être accompli avec une expression régulière.
function countDigits( $str )
{
return preg_match_all( "/[0-9]/", $str );
}
La fonction retournera le nombre de fois que le motif a été trouvé, ce qui dans ce cas est n'importe quel chiffre.
premier divisez votre chaîne , next filter le résultat en n'incluez que des caractères numériques chars puis simplement count les éléments résultants.
<?php
$text="12aap33";
print count(array_filter(str_split($text),'is_numeric'));
edit: ajout d'un repère par curiosité: (boucle de 1000000 de la chaîne et des routines ci-dessus)
preg_based.php est la solution overv de preg_match_all
harald@Midians_Gate:~$ time php filter_based.php
real 0m20.147s
user 0m15.545s
sys 0m3.956s
harald@Midians_Gate:~$ time php preg_based.php
real 0m9.832s
user 0m8.313s
sys 0m1.224s
l'expression régulière est clairement supérieure. :)
Pour PHP <5.4:
function countDigits( $str )
{
return count(preg_grep('~^[0-9]$~', str_split($str)));
}
Cette fonction parcourt la chaîne donnée et vérifie chaque caractère pour voir s'il est numérique. Si c'est le cas, il incrémente le nombre de chiffres, puis le renvoie à la fin.
function countDigits($str) {
$noDigits=0;
for ($i=0;$i<strlen($str);$i++) {
if (is_numeric($str{$i})) $noDigits++;
}
return $noDigits;
}