我正在遍历我的数据库结果并将它们输出为3列。最终结果必须是这样的:
<div class="col-xs-12 col-md-4">
Item<br>
Item<br>
</div>
<div class="col-xs-12 col-md-4">
Item<br>
Item<br>
</div>
<div class="col-xs-12 col-md-4">
Item<br>
</div>
项目数量从1到超过100。以下是我拍摄的照片:
$total = count($listArr);
$coln1 = ceil($total / 3);
$coln2 = $coln1 * 2;
$count = 0;
foreach ($listArr AS $lst) {
if ($count == 0) {
echo '
<div class="col-xs-12 col-md-4">';
} elseif(($count == $coln1 || $count == $coln2) && $count > 1) {
echo '
</div>
<div class="col-xs-12 col-md-4">';
}
echo $lst->item;
if ($count == $total) {
echo '
</div>';
}
$count++;
}
某处似乎存在逻辑错误。它似乎大部分时间都有效,但有些情况下div没有关闭。我错过了什么?
答案 0 :(得分:1)
您可以使用array_chunk
将$listArr
拆分为所需数量的块。之后,您可以将它们与implode
连接起来。
假设您的初始数组中有某种对象,则可以使用array_map
来检索要显示的属性值。
foreach (array_chunk($listArr, 3) as $chunk) {
echo '<div class="col-xs-12 col-md-4">',
implode(
'<br>',
array_map(
function ($list) {
return $list->item;
},
$chunk
)
),
'</div>';
}
回答您提出的实际问题:您永远不会达到此条件声明的内幕:
if ($count == $total) {
echo '
</div>';
}
在$count
到达$total
之前,您将处于循环之外。
如果你真的想保留你的解决方案,你可以这样解决:
if ($count == $total - 1) {
echo '
</div>';
}
或在循环开始之前递减$total
。虽然在我看来我上面提供的解决方案应该更清楚。