执行以下操作更快:
if ($var != 'test1' && $var != 'test2' && $var != 'test3' && $var != 'test4') { ... }
要么:
if (!in_array($var, array('test1', 'test2', 'test3', 'test4') { ... }
是否有许多值,在这一点上做一个或另一个更快?
(在这种情况下,第二个选项中使用的数组并不存在.)
我强烈建议使用in_array()
,任何速度差异都可以忽略不计,但分别测试每个变量的可读性是可怕的.
只是为了好玩这里是我跑的测试:
$array = array('test1', 'test2', 'test3', 'test4'); $var = 'test'; $iterations = 1000000; $start = microtime(true); for($i = 0; $i < $iterations; ++$i) { if ($var != 'test1' && $var != 'test2' && $var != 'test3' && $var != 'test4') {} } $end = microtime(true); print "Time1: ". ($end - $start)."
"; $start2 = microtime(true); for($i = 0; $i < $iterations; ++$i) { if (!in_array($var, $array) ) {} } $end2 = microtime(true); print "Time2: ".($end2 - $start2)."
"; // Time1: 1.12536692619 // Time2: 1.57462596893
需要注意的微不足道的注意事项,如果$var
未设置,方法1需要更长时间(取决于您测试的条件数)
请注意,如果您要替换一堆!==
语句,则应将第三个参数传递给in_array
as true
,这会强制对数组中的项进行类型检查.
!=
显然,普通并不需要这个.
第一个会更快 - 第二个会有很多开销:创建数组,调用函数,搜索数组......
然而,正如我在一个问题中提到的几个答案,过早的优化是所有邪恶的根源.您应该将代码编写为可读,然后如果需要对其进行优化配置,则进行优化.
编辑:
我的时间与@ Owen的代码(PHP 5.2.6/windows):
Time1: 1.33601498604 Time2: 4.9349629879
在循环内移动数组(...),如问题所示:
Time1: 1.34736609459 Time2: 6.29464697838