I am trying to figure out the fastest way (in PHP 5) to check that a value is the type I need it to be. I created two lines of code which both do the same thing. The problem is that I can't figure out which is fastest based off of benchmarks.
(is_scalar($value) ? intval($value) : 0);
settype($value, 'integer');
I created the following test code but I don't have any more than my own PC (Core2Quad + XP 32bit + php5.2.5) and a dreamhost account to test it with - both of which show about the same times for this code.
$array = array(
'false' => FALSE,
'false2'=> 0,
'false3'=> '0',
'false4'=> 'FALSE',
'true' => TRUE,
'true2' => 1,
'true3' => '1',
'true4' => 'TRUE',
'char' => chr(250),
'char2' => chr(10),
'utf' => 0xF0,
'utf1' => 0xFE,
'number' => '452.5435',
'number2' => '-3948.33e2',
'number3' => -343.54,
'number4' => 99.999,
'number5' => '3jk439fjk23945t324098523.349fj324r',
'int' => 2323,
'int2' => '2345',
'int3' => '0',
'int4' => array(),
'int5' => '39582347823908270983249078530793249802357846t890234879023490785',
'int6' => 3895732890543789324890123467548093248976123890548793289073246789458901234,
'object3' => new SimpleXMLElement('<xml></xml>'),
'array' => array(),
'array2' => array('hello'),
'array3' => array(3,54,21,0),
'array4' => array(0.2)
);
$start = microtime(TRUE);
for($x=0;$x<10000;$x++) {
foreach( $array as $value ) {
(is_scalar($value) ? intval($value) : 0);
//settype($value, 'integer');
}
}
print (microtime(TRUE) - $start). ' seconds';
Anyway, I was wondering if there might be more here that I am missing as to which of these methods might not only work faster - but might yield odd results as well. Another thing is that should this prove success full with ints - then other types such as strings and floats should also work.
:UPDATE:
I just tested these methods against the float type and found that settype() was slower (.28 sec) vs floatval() (.21 sec). So the answer to this question may only be valid for the int type.
//Float
(is_scalar($value) ? floatval($value) : 0);
settype($value, 'float');