在PHP中,使用switch语句还是if语句更快?为什么?

4

当有至少10-20个条件时,使用开关(switch)语句或者if语句执行速度快吗?

谢谢 戴夫

4个回答

3

这个人 进行了基准测试并得出结论:“if/else 稍微好一些。” 包括代码和基准测试结果。

这个基准测试 得出结论它们大致相等。


实际上,“同样的脚本,显示switch case在所有情况下都更快”来自同一个链接。 - Alix Axel
2
正如其他人所指出的那样,除非你发现你的代码中的这个区域已经成为瓶颈,否则最好优化可读性而不是性能。就像 Hoare 所说的,“97% 的时间,过早的优化是万恶之源。” - Jordan Running

2

使用其中一个可能会有轻微差异,但对于10-20个条件,我认为switch case可能更易读和更适合。


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);
 }
  • 或许不会有影响,但是请告诉我们具体情况,或者考虑优化其他可能成为瓶颈的地方。

1

我一直被教导说,如果有4或5个以上的条件,你应该几乎总是使用switch而不是if/else/else if结构 - 但我可能是错的。

我对Jordan提供的(第一个)链接持怀疑态度,我认为当适当使用时,switch应该会稍微快一些,我没有硬数据来支持它,但你可以自己进行基准测试。一个永远不应该使用switch的场景是当你需要进行严格的(===)比较时。

无论如何,这只是微小的优化,我更喜欢有一个可读性好、漂亮的(女孩风格的)代码,即使可能会牺牲0.000001秒,也不要一个丑陋的代码。

对于10-20个条件,我认为你应该绝对使用switch


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接