Ben bir değer type I need olması olduğunu kontrol etmek için (PHP 5) hızlı şekilde anlamaya çalışıyorum. Ben de aynı şeyi yapmak kod iki satır oluşturulur. Sorun hızlı kriterler off dayanır hangi bilemiyorum olabilir.
(is_scalar($value) ? intval($value) : 0);
settype($value, 'integer');
Ben aşağıdaki test kodu oluşturulur ama ben bunu test etmek için kendi PC (Core2Quad + XP 32bit + php5.2.5) ve dreamhost hesabına daha fazla bir yok - bu kod için aynı zamanlarda yaklaşık göstermek her ikisi de.
$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';
Ama aynı zamanda garip sonuçlar verebilmektedir - Orada Ben bu yöntemlerden daha hızlı çalışması olabilir değil sadece hangi kadar eksik olduğunu burada daha olabilir eğer neyse, ben merak ediyordum. Sonra bu dizeleri ve su baskını gibi diğer türleri de çalışması gerekir - Başka bir şey bu ints tam başarı kanıtlamak gerektiğidir.
: GÜNCELLEME:
Ben sadece şamandıra tipine karşı bu yöntemleri test ve settype () floatval vs (0,28 saniye) () (.21 saniye) yavaş bulundu. Yani bu sorunun cevabı sadece int türü için geçerli olabilir.
//Float
(is_scalar($value) ? floatval($value) : 0);
settype($value, 'float');