更快地使用in_array()或大if条件?

时间:2012-05-19 13:56:05

标签: php arrays

我正在循环中检查字符串是否等于另一个字符串。简单的东西。

然而,似乎我一直在添加要检查的字符串,并且有十个不同的字符串我正在检查每个循环。创建一个要检查的字符串数组更简单,然后执行in_array();但是我想知道哪个会更快地解析并使用更少的系统资源?

阵列

$hideme  = array(".", "..", "Thumb.db", "index.php", "icons", "index_backup.php",
     "style.css", "highlighter.css", "highlighter.js", "users");
if (!in_array($sub, $hideme)) {

字符串!=字符串

if ($sub != "." && $sub != ".." ...etc

差异可能微不足道,只是好奇以备将来参考。

3 个答案:

答案 0 :(得分:6)

使用第一个。速度不会有太大差异,但可读性才是真正的差异。

CPU周期很便宜。程序员时间不是。

答案 1 :(得分:1)

内置函数总是更快,因为它们是编译的C代码。必须解释PHP代码。

如果你真的关心CPU周期,isset()是最快的,所以将可能的值设置为数组键将是最快的方法。当然,有CPU和内存使用,因此使用较少的系统资源取决于您要保存的资源。

正如@Kendall Frey所说,这是微优化,因此保持代码可读性并且不做任何有关优化的事情,除非探查器显示此代码对执行有很大影响。

答案 2 :(得分:0)

如果你的$ hideme数组变大,那么容易扩展的最简单的解决方案(也许是最快的)就是使用isset()。

$hideme  = array(".", "..", "Thumb.db", "index.php", "icons", "index_backup.php",
 "style.css", "highlighter.css", "highlighter.js", "users");

if (!isset($hideme[$sub])) {
    // $sub is not in $hideme
}

对于小型数组,in_array工作正常,但通常较慢,如果数组很大,可能会变得太慢。