Christoph Jeschke: ctype-digit

Beitrag lesen

Guten Tag,

Welche Funktion(unter Berücksichtigung der notwendigen Anpasssung des Werte
an die Funktion)sollte ich nun, und warum, dafür nutzen?
Oder doch besser $pattern = '/\d*/';?

Ich habe folgendes Skript gerade mal durch einen Profiler (xdebug) geschoben:

<?php  
  
echo 'Saving to: ', xdebug_get_profiler_filename(), PHP_EOL;  
  
define('LOOP', 1000000);  
define('TEST', 234.456);  
  
for($i = 0; $i < LOOP; $i++)  
{  
    ctype_digit(strval(TEST));  
}  
  
for($i = 0; $i < LOOP; $i++)  
{  
    preg_match('!^\d+$!', TEST);  
}  
  
for($i = 0; $i < LOOP; $i++)  
{  
    filter_var(TEST, FILTER_VALIDATE_INT);  
}  
?>  

Das Ergebnis (Achtung, 4.5 MB) ist recht interessant: filter_var() und ctype_digit() sind nahezu gleich schnell. ctype_digit ist einen Tick schneller, allerdings verliert die Version ihren Geschwindigkeitsvorteil nur durch den Aufruf von strval() - ansonsten wäre ctype_digit() nahezu sieben mal so schnell wie filter_var().
Wie erwartet verliert preg_match() deutlich, denn es benötigt nahezu die doppelte Zeit von filter_var().

Man müsste mal schauen, ob es noch eine bessere Lösung für strval() gibt, dann würde die ctype_digit()-Version nämlich deutlich gewinnen.

Gruß
Christoph Jeschke

--
Zend Certified Engineer
Certified Urchin Admin