2012-05-02 1 views
2

Что было бы более оптимальным из двух? I can't test it on my computer, I can't rely on it.Несколько foreach против нескольких, если внутри foreach

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 
    } 
} 

ответ

3

Я думаю, что первый из них лучше. Скажем, $a === true и $b === true. В первом примере будет выполнен только один цикл, но во втором примере тот же цикл будет выполнен дважды.

+0

как же это сообщество вики? – Michelle

+0

@JackSpairow Из-за моей мыши. лол – Leri

0

1 петля всегда лучше, чем (потенциально) 4.

2

это будет зависеть от вероятности каждого условия истинности, а длина коллекции вы Перебор. Накладные расходы по условию IF были бы небольшими, но были бы сложены над большой коллекцией, тогда как накладные расходы на итератор foreach несколько выше, но могут быть сведены к минимуму, если некоторые из этих условий редко бывают истинными.

0

Если условия очень аналогично, его может быть проще читать либо с помощью инструкции switch(), либо если $ a, $ b, $ c и $ d являются взаимоисключающими, используя elseif.

0

Два фрагмента кода не делают то же самое, и поэтому вы должны использовать тот, который правильный, а не выбирать только по причине скорости.

Чтобы увидеть это, рассмотрите, что произойдет, если верно более одного из $a, $b и т. Д. Два фрагмента будут выполнять множество do somethings, но в другом порядке.

рассмотреть также разница, если do somethings может изменить го значения $a, $b и т.д.

 Смежные вопросы

  • Нет связанных вопросов^_^