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