当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《哪个更快:in_array()或PHP中的一堆表达式?》经验,为你挑选了3个好方法。

执行以下操作更快:

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

要么:

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

是否有许多值,在这一点上做一个或另一个更快?

(在这种情况下,第二个选项中使用的数组并不存在.)



1> Owen..:

我强烈建议使用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需要更长时间(取决于您测试的条件数)



2> Rob..:

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

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



3> Greg..:

第一个会更快 - 第二个会有很多开销:创建数组,调用函数,搜索数组......

然而,正如我在一个问题中提到的几个答案,过早的优化是所有邪恶的根源.您应该将代码编写为可读,然后如果需要对其进行优化配置,则进行优化.

编辑:

我的时间与@ Owen的代码(PHP 5.2.6/windows):

Time1: 1.33601498604
Time2: 4.9349629879

在循环内移动数组(...),如问题所示:

Time1: 1.34736609459
Time2: 6.29464697838

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有