使用している PHP のバージョンによって異なります。オンPHP 5.3
in_array()
は遅くなります。ただし、PHP 5.4 以降in_array()
では高速になります。
条件が時間の経過とともに拡大するか、この条件が動的である必要があると思われる場合にのみ、 を使用してin_array()
ください。
ベンチマークを行いました。条件を 10,000 回ループします。
の結果PHP 5.3.10
+----------------------------+---------------------------+
| Script/Task name | Execution time in seconds |
+----------------------------+---------------------------+
| best case in_array() | 1.746 |
| best case logical or | 0.004 |
| worst case in_array() | 1.749 |
| worst case logical or | 0.016 |
| in_array_vs_logical_or.php | 3.542 |
+----------------------------+---------------------------+
の結果PHP 5.4
+----------------------------+---------------------------+
| Script/Task name | Execution time in seconds |
+----------------------------+---------------------------+
| best case in_array() | 0.002 |
| best case logical or | 0.002 |
| worst case in_array() | 0.008 |
| worst case logical or | 0.010 |
| in_array_vs_logical_or.php | 0.024 |
+----------------------------+---------------------------+
最良のケース:最初の要素 で一致します。
最悪の場合:最後の要素 で一致します。
これがコードです。
$loop=10000;
$cases = array('best case'=> 'a', 'worst case'=> 'z');
foreach($cases as $case => $x){
$a = utime();
for($i=0;$i<$loop; $i++){
$result = ($x == 'a' || $x == 'b' || $x == 'c' || $x == 'd' || $x == 'e' || $x == 'f' || $x == 'g' || $x == 'h' || $x == 'i' || $x == 'j' || $x == 'k' || $x == 'l' || $x == 'm' || $x == 'n' || $x == 'o' || $x == 'p' || $x == 'q' || $x == 'r' || $x == 's' || $x == 't' || $x == 'u' || $x == 'v' || $x == 'w' || $x == 'x' || $x == 'y' || $x == 'z');
}
$b = utime();
$ar = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');
for($i=0;$i<$loop; $i++){
$result = in_array($x, $ar);
}
$c = utime();
$Table->addRow(array("$case in_array()", number_format($c-$b, 3)));
$Table->addRow(array("$case logical or", number_format($b-$a, 3)));
}
これはfloat でマイクロ秒を提供utime()
する のラッパーであり、インスタンスです。microtime()
$Table
Console_Table