+ -
当前位置:首页 → 问答吧 → 试问, 这两段程序哪个效率高呢??

试问, 这两段程序哪个效率高呢??

时间:2011-09-05

来源:互联网

现在不是讨论要匹配什么字符串.
而是想问下面两段程序,执行效率是不是一样呢?
第一段中IF 如果 && 前的条件不成立了,php还会去判断&&后面的条件吗??

  1.         foreach($array as $value) {
  2.                 if((substr_count($value, '-') == 5) && preg_match("#^[0|1|3|-]{14}$#", $value)) {
  3.                         array_push($arrValue, $value);
  4.                 }
  5.         }
复制代码

  1. foreach($array as $value) {
  2.         if(substr_count($value, '-') == 5) {
  3.                 if(preg_match("#^[0|1|3|-]{14}$#", $value)) {
  4.                         array_push($arrValue, $value);
  5.                 }
  6.         }
  7. }
复制代码

作者: 北极猫   发布时间: 2011-09-05

每个跑10万次比较时间

作者: kawais   发布时间: 2011-09-05

- -没多大区别,都慢

作者: 13966837   发布时间: 2011-09-05

第一段,第一个条件不成立就会跳过,不会执行后面的匹配

作者: TNT9527   发布时间: 2011-09-05

第一段中IF 如果 && 前的条件不成立了,php还会去判断&&后面的条件吗??

不会

作者: 13966837   发布时间: 2011-09-05

- -没多大区别,都慢
13966837 发表于 2011-9-5 15:28



   哦! 兄台.. 请您指教一下.. 我要更高的效率. 该怎么办呢?

作者: 北极猫   发布时间: 2011-09-05

有人说会都判断..我自认为只要一个条件不成立,那么程序就不会再判断另一个了. 只是我不确定他的判断顺序是从左开始还是从右开始.

作者: 北极猫   发布时间: 2011-09-05

每个跑10万次比较时间
kawais 发表于 2011-9-5 15:25



   分就给你了. 这是一种探索的精神.楼上也许回答对了.但是没有讲为什么?? 是主观猜测还是已经知道运行原理? 没说.

作者: 北极猫   发布时间: 2011-09-05

应该是第二段,你测试一下

作者: fireye   发布时间: 2011-09-05

我就不废话了,既然你不会google,那就百度“逻辑短路”吧

作者: imint0   发布时间: 2011-09-05

理论上效率都一样,如果还有preg_match 还有不成立的情况,用下面那个,否则用上面那个来的直观

作者: llh110220   发布时间: 2011-09-05

有人说会都判断..我自认为只要一个条件不成立,那么程序就不会再判断另一个了. 只是我不确定他的判断顺序是 ...
北极猫 发表于 2011-9-5 15:40



在and运算中,第一个不成立,则退出判断。
在or运算中,第一个成立,则退出判断。

可以用代码验证测试,也可以从逻辑推理去推导,能够开发语言的人都是牛人,不会犯那么低级的错误的。

作者: 单骑闯天下   发布时间: 2011-09-05

我就不废话了,既然你不会google,那就百度“逻辑短路”吧
imint0 发表于 2011-9-5 16:29



   哇! 原来这叫逻辑短路呀  学习了... HOH

作者: 北极猫   发布时间: 2011-09-05

第一个快一些

作者: goyem   发布时间: 2011-09-05

第一个快一些
goyem 发表于 2011-9-5 16:38


为什么呢?? 不是一样的吗?

作者: 北极猫   发布时间: 2011-09-05

理论上效率是一样的,这个差别可以忽略不计,除非你的数组很大,这样你就只能看if的执行成本,毕竟如果第一个条件成立,第二段重新开始一个if判读,小数组计较这个就比较蛋疼了。

作者: TNT9527   发布时间: 2011-09-05

一样的啊

作者: 剑枫   发布时间: 2011-09-05

现在不是讨论要匹配什么字符串.
而是想问下面两段程序,执行效率是不是一样呢?
第一段中IF 如果 && 前的条件不成立了,php还会去判断&&后面的条件吗??

  1.         foreach($array as $value) {
  2.                 if((substr_count($value, '-') == 5) && preg_match("#^[0|1|3|-]{14}$#", $value)) {
  3.                         array_push($arrValue, $value);
  4.                 }
  5.         }
复制代码

  1. foreach($array as $value) {
  2.         if(substr_count($value, '-') == 5) {
  3.                 if(preg_match("#^[0|1|3|-]{14}$#", $value)) {
  4.                         array_push($arrValue, $value);
  5.                 }
  6.         }
  7. }
复制代码

作者: 北极猫   发布时间: 2011-09-05

每个跑10万次比较时间

作者: kawais   发布时间: 2011-09-05

- -没多大区别,都慢

作者: 13966837   发布时间: 2011-09-05

第一段,第一个条件不成立就会跳过,不会执行后面的匹配

作者: TNT9527   发布时间: 2011-09-05

第一段中IF 如果 && 前的条件不成立了,php还会去判断&&后面的条件吗??

不会

作者: 13966837   发布时间: 2011-09-05

- -没多大区别,都慢
13966837 发表于 2011-9-5 15:28



   哦! 兄台.. 请您指教一下.. 我要更高的效率. 该怎么办呢?

作者: 北极猫   发布时间: 2011-09-05

有人说会都判断..我自认为只要一个条件不成立,那么程序就不会再判断另一个了. 只是我不确定他的判断顺序是从左开始还是从右开始.

作者: 北极猫   发布时间: 2011-09-05

每个跑10万次比较时间
kawais 发表于 2011-9-5 15:25



   分就给你了. 这是一种探索的精神.楼上也许回答对了.但是没有讲为什么?? 是主观猜测还是已经知道运行原理? 没说.

作者: 北极猫   发布时间: 2011-09-05

应该是第二段,你测试一下

作者: fireye   发布时间: 2011-09-05

我就不废话了,既然你不会google,那就百度“逻辑短路”吧

作者: imint0   发布时间: 2011-09-05

理论上效率都一样,如果还有preg_match 还有不成立的情况,用下面那个,否则用上面那个来的直观

作者: llh110220   发布时间: 2011-09-05

有人说会都判断..我自认为只要一个条件不成立,那么程序就不会再判断另一个了. 只是我不确定他的判断顺序是 ...
北极猫 发表于 2011-9-5 15:40



在and运算中,第一个不成立,则退出判断。
在or运算中,第一个成立,则退出判断。

可以用代码验证测试,也可以从逻辑推理去推导,能够开发语言的人都是牛人,不会犯那么低级的错误的。

作者: 单骑闯天下   发布时间: 2011-09-05

我就不废话了,既然你不会google,那就百度“逻辑短路”吧
imint0 发表于 2011-9-5 16:29



   哇! 原来这叫逻辑短路呀  学习了... HOH

作者: 北极猫   发布时间: 2011-09-05

第一个快一些

作者: goyem   发布时间: 2011-09-05

第一个快一些
goyem 发表于 2011-9-5 16:38


为什么呢?? 不是一样的吗?

作者: 北极猫   发布时间: 2011-09-05

理论上效率是一样的,这个差别可以忽略不计,除非你的数组很大,这样你就只能看if的执行成本,毕竟如果第一个条件成立,第二段重新开始一个if判读,小数组计较这个就比较蛋疼了。

作者: TNT9527   发布时间: 2011-09-05

一样的啊

作者: 剑枫   发布时间: 2011-09-05

相关阅读 更多