2016-04-26 2 views
0

У меня есть кусок кода, который выглядит, как это на данный момент:Разница между Еогеаспом (если()), и если (Еогеасп())

foreach ($array['subarray'] as $current) { 

    if ($some_variable === 'some_string') { 

     $new_array[] = $current['some_name']; 

    } else { 

     $new_array[] = $current['another_name']; 

    } 
} 

Тот же самый код также может быть записан следующим образом:

if ($some_variable === 'some_string') { 

    foreach ($array['subarray'] as $current) { 

     $new_array[] = $current['some_name']; 

    } 

} else { 

    foreach ($array['subarray'] as $current) { 

     $new_array[] = $current['another_name']; 

    } 
} 

Мой вопрос: есть ли реальная разница между ними или это просто до предпочтения? Я в основном говорю о производительности здесь, но также, если есть некоторый стандарт того, как вложенность обычно выполняется в PHP.

+0

только в первом варианте 1 'foreach' во втором 2' foreach' и для каждой зарезервированной памяти 'foreach'. – Naumov

+1

Производительность мудрая, вторая лучше (подумал, зависит ли это заметное различие от других факторов). Это связано с тем, что в первом случае вы выполняете условие на каждой итерации вместо массива, а не один раз. –

+0

Почему бы не использовать функцию для этих двух циклов во втором примере? –

ответ

4

Учитывая эти конкретные примеры, второй пример лучше в производительности (если условие используется только один раз), но этот подход был бы еще лучше:

$new_key = 'default_value'; 
if ($some_variable === 'some_string') { 
    $new_key = 'special_value'; 
} 

foreach ($array['subarray'] as $current) { 
    $new_array[] = $current[$new_key]; 
} 

РЕДАКТИРОВАТЬ

Если разница не только ключевое имя, то я бы основал выбор по сложности и подобию кода в foreach, в первую очередь, принимая во внимание принцип DRY и читаемость кода, а также микро-оптимизацию (как правило, не стоит). Таким образом, это сильно зависит от того, что вы делаете в этих циклах, насколько важна ваша система и насколько велики ваши структуры данных.

+0

Ahh, я вижу, что в моем примере я был немного неясен. '$ Current [' default_value ']' зависит от каждой итерации. Плохо используемое имя примера с моей стороны. Но я все еще понимаю вашу мысль. – Szandor

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