在PHP中切换或If语句更快,以及为什么

时间:2010-01-24 06:28:03

标签: php

如果有至少10-20个条件,那么switch或If语句是否可以快速执行

由于 戴夫

4 个答案:

答案 0 :(得分:3)

This person对此进行了基准测试并得出结论:“if / else稍好一些。”代码和基准包括在内。

This benchmark得出结论认为它们大致相同。

答案 1 :(得分:2)

使用其中一个可能略有不同,但对于10-20个条件,我认为开关案例可能更具可读性和更适合。

答案 2 :(得分:1)

我一直被告知,对于超过4或5个条件,您应该几乎总是使用switch而不是if / else / else if结构 - 我可能会但是错了。

我怀疑Jordan提供的(第一个)链接,我认为如果使用得当switch应该稍快一些,我没有硬数据支持它,但你总是可以自己对它进行基准测试。如果您不应该使用switch,则需要进行严格(===)比较。

无论如何,关键是这是微优化,我更喜欢有一个可读的,漂亮的(女孩风格的)代码,可能花费0.000001秒而不是丑陋的代码。

对于10-20个条件,您一定要使用switch IMO。

答案 3 :(得分:1)

如果不进一步了解问题的本质,我猜你在这里显然是在优化错误的东西。

唯一的情况是,如果您循环遍历大型数据集并根据一个特定数据字段的内容决定执行不同的操作,则条件的速度将是相关的。

  • 如果你对每个数据集做了很多事情,那么条件的成本应该与每个循环迭代的速度无关,你应该优化可读性并使用switch语句。

  • 如果你在每次迭代中做的很少但是必须做一百万次,那么你应该以不同的方式去做:

    • 如果数据来自数据库,则使用SQL卸载到源数据库的批量转换。
    • 按切换值对所有数据进行排序,然后单独处理每个子集
    • 为每个不同的数据点调用不同的函数可能会更快,如下所示:

 foreach($alldata as $index => $dataset) 
 { 
   $function_to_call = 'handle_'.$dataset->switching_value;
   if (function_exists($function_to_call))
      $function_to_call($dataset);
 }
  • 或者它可能不会 - 但仍然 - 告诉我们确切情况或考虑优化其他事情,如果整个事情不是瓶颈。