2

两者中哪个更优?I can't test it on my computer, I can't rely on it.

foreach($links as $link){
    if($a){
        //do something
    }
    if($b){
        //do something
    }
    if($c){
        //do something
    }
    if($d){
        //do something
    }
}

if($a){
    foreach($links as $link){
        //do something
    }
}
if($b){
    foreach($links as $link){
        //do something
    }
}
if($c){
    foreach($links as $link){
        //do something
    }
}
if($d){
    foreach($links as $link){
        //do something
    }
}
4

5 回答 5

3

我觉得第一个更好。让我们说$a === true$b === true。在第一个示例中,只会执行一个循环,但在第二个示例中,相同的循环将执行两次。

于 2012-05-02T11:00:02.797 回答
2

这将取决于每个条件为真的可能性,以及您正在循环的集合的长度。IF 条件的开销很小,但会在一个大集合上加起来,而 foreach 迭代器的开销略高,但如果其中一些条件很少为真,则可以最小化

于 2012-05-02T11:00:58.947 回答
0

1 个循环总是比(可能)4 个更好。

于 2012-05-02T11:00:29.940 回答
0

如果条件非常相似,使用语句可能更容易阅读switch(),或者如果 $a、$b、$c 和 $d 互斥,则使用elseif.

于 2012-05-02T11:24:39.977 回答
0

这两个代码片段做的事情不同,因此您应该使用正确的一个,而不是仅仅基于速度来选择。

要看到这一点,请考虑如果多个$a, $b, etc 为真时会发生什么。这两个片段都将执行很多do somethings,但顺序不同。

do somethings如果可能会改变$a, $b等的值,还要考虑差异。

于 2012-05-02T11:25:03.923 回答