2016-04-26 10 views
0

Iは、現時点でこのようなコードの部分を有する:同じコードは、このように記述することができる差(IF())及びIF(foreachの())

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']; 

    } 
} 

私の質問は、 2人の間に本当の違いがあるのですか?私は主にここでのパフォーマンスを話していますが、PHPでネストがどのように行われるかについての標準がある場合もあります。これらの特定の例を考える

+0

ちょうど最初の変種1で 'foreach'が2番目の' foreach'と 'foreach'割り当てメモリごとにあります。 – Naumov

+1

パフォーマンスは賢明ですが、2番目の方が優れています(目立つ差異が他の要因によって異なるかどうか)。これは、最初は、アレイの代わりに繰り返し実行される条件を1回ではなく実行するためです。 –

+0

2つ目の例では、2つのループに関数を使用してみませんか? –

答えて

4

、第二の例は、(条件は一度だけ使用されている場合)、パフォーマンスに優れているが、このアプローチは、より良いだろう:

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

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

EDIT

差がある場合キー名だけでなく、foreachのコードの複雑さと類似性に基づいて、DRYの原則とコードの読みやすさを考慮し、マイクロ最適化(通常は価値がない)を最期にします。したがって、それらのループで何をやっているか、システムがどれほど重大で、データ構造がどれほど大きいかによって大きく左右されます。

+0

ああ、私は私の例では少し不明だった。 '$ current [' default_value ']'は反復ごとに異なります。私の部分でよく使われていない例の名前。しかし、私はまだあなたのことを理解しています。 – Szandor