2011-06-05 35 views
-1

這真的是一個愚蠢的問題,但我想知道下面的條件哪個循環最好用? foreach或for循環?PHP foreach或循環用於此目的?

$ids = array(1,2,3,4,5); 
$query = 'INSERT INTO blah(id) VALUES '; 

for($i=1; $i<=count($ids); $i++) { 
    $query .= ' (? , ?) , '; 
} 

OR

foreach($ids as $id) { 
    $query .= ' (? , ?) , '; 
} 
+4

翻轉硬幣,然後挑一個。 – BoltClock 2011-06-05 09:30:51

+2

'str_repeat('(?,?),',sizeof($ ids));' – Petah 2011-06-05 09:39:04

回答

3

的foreach在這種情況下更簡潔。

3

只需使用implode

$ids = array(1,2,3,4,5); 
$query = 'INSERT INTO blah(id) VALUES ('; 
$query .= implode(', ', $ids); 
$query .= ');'; 

這是一個標準功能,因此可能是最好的/最優化的方式來做到這一點。

除此之外,foreach專門用於這種情況,因此您不需要爲計數目的定義變量。使其更具可讀性。

最後,它對性能沒有明顯影響,所以您可以隨意使用任何您想要的。它更多的是關於編碼風格和可讀性。

+0

我正在使用PDO的未命名的佔位符,所以您使用implode()的解決方案對我來說沒用。上面這段代碼是演示而不是實際的代碼。 – 2011-06-05 09:36:30

1

Foreach絕對更容易。但是,如果你想訪問你的價值觀的鑰匙(你$i),你可以這樣說:

foreach($ids as $i => $id) { 
    .... 
} 

但這也與陣列,其中最關鍵的不是數字,例如工作的偉大關聯數組。

0

這並不重要,但請記住,沒有指定鍵的數組將從索引0開始 - 而不是像第一個示例中假設的那樣是1

使用foreach()可以更容易閱讀,但是使用for()允許你如果需要的話,而無需二者風味混合(使用當前元素即沒有一個索引,以索引的其它元件)容易進入一個/以下元件。