哪个更快:in_array()还是PHP中的一堆表达式?

2022-08-31 00:15:38

执行以下操作是否更快:

 if ($var != 'test1' && $var != 'test2' && $var != 'test3' && $var != 'test4') { ... }

艺术

 if (!in_array($var, array('test1', 'test2', 'test3', 'test4') { ... }

是否有许多值,此时执行一个或另一个值会更快?

(在本例中,第二个选项中使用的数组不存在。


答案 1

我强烈建议只使用,任何速度差异都可以忽略不计,但是单独测试每个变量的可读性是可怕的。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)."<br />";

$start2 = microtime(true);
for($i = 0; $i < $iterations; ++$i) {
    if (!in_array($var, $array) ) {}
}
$end2 = microtime(true);

print "Time2: ".($end2 - $start2)."<br />";

// Time1: 1.12536692619
// Time2: 1.57462596893

注意稍微微不足道的注意事项,如果未设置,则方法1需要更长的时间(取决于您测试的条件数)$var

更新的 PHP 版本:

Martijn:我把数组扩展到个元素,并寻找,作为一种平均情况。test3

5.6 菲律宾比索

Time1: 0.20484399795532
Time2: 0.29854393005371

7.1 菲律宾比索

Time1: 0.064045906066895
Time2: 0.056781053543091

7.4 菲律宾比索

Time1: 0.048759937286377
Time2: 0.049691915512085

8.0 菲律宾比索

Time1: 0.045055150985718
Time2: 0.049431085586548

结论:最初的测试不是最好的测试,而且:在php7 +中已经成为一个偏好问题。


答案 2

请注意,如果要替换一堆语句,则应将第三个参数传递给 in_array as ,这将对数组中的项强制执行类型检查。!==true

显然,普通不需要这个。!=