2011-06-05 76 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()允许你如果需要的话,而无需二者风味混合(使用当前元素即没有一个索引,以索引的其它元件)容易进入一个/以下元件。