多个foreach vs多个如果在foreach内部

时间:2012-05-02 10:54:51

标签: php if-statement foreach control-structure

哪两个更优化? 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
    }
}

5 个答案:

答案 0 :(得分:3)

我认为第一个更好。我们说$a === true$b === true。在第一个例子中,只执行一个循环,但在第二个例子中,相同的循环将被执行两次。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

1循环总是好于(可能)4。

答案 3 :(得分:0)

如果条件非常相似,使用switch()声明,或使用elseif $ a,$ b,$ c和$ d相互排斥可能更容易阅读。

答案 4 :(得分:0)

这两段代码并没有做同样的事情,因此你应该使用正确的代码,而不是仅仅根据速度选择。

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

如果do somethings可能会更改$a, $b等值,也请考虑差异