2016-04-26 50 views
0

我有一段代碼,看起來像這樣的時刻:差(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']; 

    } 
} 

我的問題是;這兩者之間是否存在真正的差異,還是隻是偏好?我主要是在這裏談論性能,但是如果有一些標準來了解如何通常在PHP中完成嵌套。

+0

只是在第一個變種1 foreach中在第二個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]; 
} 

EDIT

如果該差不僅是關鍵的名字,那麼我會根據代碼的複雜性和相似性來選擇代碼,首先考慮DRY原則和代碼可讀性,最後是微觀優化(通常不值得)。所以,這很大程度上取決於你在這些循環中做什麼,你的系統有多關鍵,數據結構有多大。

+0

啊,我看到我的例子有點不清楚。 '$ current ['default_value']'隨着每次迭代而變化。我的一個很好用的例子名字。但我仍然明白你的觀點。 – Szandor