2

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。最初の例では1つのループのみが実行されますが、2番目の例では同じループが2回実行されます。

于 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

コードの 2 つのスニペットは同じことを行うわけではないため、正しい方を使用する必要があり、速度だけを理由に選択するのではありません。

これを確認するには、 などが 1 つ以上$a, $b当てはまる場合に何が起こるかを考えてください。2 つのスニペットは両方とも多くの を実行しますがdo somethings、順序が異なります。

がなどdo somethingsの th 値を変更する可能性がある場合は、違いも考慮してください。$a, $b

于 2012-05-02T11:25:03.923 に答える