正如塔德曼在您的问题下的评论中所述。最好的方法应该使用模运算符 http://php.net/manual/en/language.operators.arithmetic.php (%
) with 3
.
将分离条件放在每次迭代的开始处。 (Demo http://sandbox.onlinephpfunctions.com/code/74a24f115fec724dbc148a59a73619e72f2f9a13)
像这样:
$x=0; // I prefer to increment starting from zero.
// This way I can use the same method inside a foreach loop on
// zero-indexed arrays, leveraging the keys, and omit the `++` line.
echo "<div class=\"row\">";
foreach($rows as $row){
if($x!=0 && $x%3==0){ // if not first iteration and iteration divided by 3 has no remainder...
echo "</div>\n<div class='row'>";
}
echo "<div>$row</div>";
++$x;
}
echo "</div>";
这将创建:
<div class="row"><div>one</div><div>two</div><div>three</div></div>
<div class='row'><div>four</div><div>five</div><div>six</div></div>
后期编辑,这里有一些针对类似情况的其他方法,它们将提供相同的结果:
foreach(array_chunk($rows,3) as $a){
echo "<div class=\"row\"><div>",implode('</div><div>',$a),"</div></div>\n";
}
or
foreach ($rows as $i=>$v){
if($i%3==0){
if($i!=0){
echo "</div>\n";
}
echo "<div class=\"row\">";
}
echo "<div>$v</div>";
}
echo "</div>";
为了澄清什么不应该做...
Sinan Ulker 的答案将导致不需要的结果,具体取决于结果数组的大小。
这是一个揭示该问题的通用示例:
使用此输入数组来表示您的 pdo 结果:
$rows=["one","two","three","four","five","six"];
每次迭代结束时 Sinan 的条件:
$i=1;
echo "<div class=\"row\">";
foreach($rows as $row){
echo "<div>$row</div>";
if($i%3==0)echo "</div>\n<div class='row'>"; // 6%3==0 and that's not good here
// 6%3==0 and will echo the close/open line after the content to create an empty, unwanted dom element
$i++;
}
echo "</div>\n\n";
将创建这个:
<div class="row"><div>one</div><div>two</div><div>three</div></div>
<div class='row'><div>four</div><div>five</div><div>six</div></div>
<div class='row'></div> //<--- this extra element is not good