这取决于您使用的 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)));
}
这是一个提供微秒浮点数utime()
的包装器,是一个实例。microtime()
$Table
Console_Table