我需要一些关于OpenCart的php循环的帮助。
我需要做的是每4个循环包围一个div输出数据。
我有以下
<?php foreach ($categories as $category) { ?>
<div class="col-lg-3 col-md-3">.....</div>
<?php } ?>
我明白
<div class="col-lg-3 col-md-3">.....</div>
<div class="col-lg-3 col-md-3">.....</div>
<div class="col-lg-3 col-md-3">.....</div>
<div class="col-lg-3 col-md-3">.....</div>
<div class="col-lg-3 col-md-3">.....</div>
<div class="col-lg-3 col-md-3">.....</div>
<div class="col-lg-3 col-md-3">.....</div>
<div class="col-lg-3 col-md-3">.....</div>
<div class="col-lg-3 col-md-3">.....</div>
<div class="col-lg-3 col-md-3">.....</div>
但我希望得到的是
<div class="row">
<div class="col-lg-3 col-md-3">.....</div>
<div class="col-lg-3 col-md-3">.....</div>
<div class="col-lg-3 col-md-3">.....</div>
<div class="col-lg-3 col-md-3">.....</div>
</div>
<div class="row">
<div class="col-lg-3 col-md-3">.....</div>
<div class="col-lg-3 col-md-3">.....</div>
<div class="col-lg-3 col-md-3">.....</div>
<div class="col-lg-3 col-md-3">.....</div>
</div>
<div class="row">
<div class="col-lg-3 col-md-3">.....</div>
<div class="col-lg-3 col-md-3">.....</div>
</div>
非常感谢任何帮助:)
答案 0 :(得分:7)
试试这个
<?php
$i=0;
$wrap_count = 4; // you can change this no of divs to wrap
foreach ($categories as $category)
{
$i+=1;
if($i%$wrap_count==1)
{
echo '<div class="row">';
}
?>
<div class="col-lg-3 col-md-3">.....</div>
<?php
if($i%$wrap_count==0)
{
echo '</div>';
}
}
if($i%$wrap_count!=0)
{
echo '</div>';
}
?>
答案 1 :(得分:4)
<?php
$i = 0;
foreach ($categories as $category) {
if (($i % 4) === 0) {
echo "<div class='row'>";
}
echo '<div class="col-lg-3 col-md-3"></div>';
if (($i % 4) === 3) {
echo "</div>";
}
$i++;
}
?>
Ps,如果$categories
是非键控数组,即array('a', 'b', 'c')
,那么您可以删除i = 0;
和i++;
并将foreach更改为foreach ($categories as $i => $category) {
}
正如评论中提到的zerkms,这里的魔法来自% (Modulo operation),它基本上就像一个时钟 - 数字将从0向上递增,直到它们达到12,此时它被重置为0再次。所以时钟据说是模12。在这个例子中,我们使用模4来循环打印我们的开始和结束行元素。
模4是序列0, 1, 2, 3, 0, 1, 2, 3, 0, 1, etc
答案 2 :(得分:3)
试试这个: -
<div class="row">
<?php
$i = 1;
foreach ($categories as $category) { ?>
<div class="col-lg-3 col-md-3">.....</div>
<?php if ($i % 4 == 0){ ?>
</div><div class="row">
<?php } ?>
<?php $i++; ?>
<?php } ?>
答案 3 :(得分:1)
您可以使用计数器变量。最初将其设置为等于0.然后对于每个循环检查其值。如果它等于0,则输出<div class="row">
并将1加到变量的值上。如果其值> 0和&lt; 5然后输出<div class="col-lg-3 col-md-3">.....</div>
并为其添加1的值。如果它等于5输出</div>
并将计数器变量重置为0。
类似(代码测试):
<?php
$counter = 0;
foreach ($categories as $category) {
If ($counter == 0) {
echo '<div class="row">
<div class="col-lg-3 col-md-3">.....</div>
';
$counter++;
} elseif ($counter > 0 && $counter < 3) {
echo '<div class="col-lg-3 col-md-3">.....</div>
';
$counter++;
} elseif ($counter == 3) {
echo '<div class="col-lg-3 col-md-3">.....</div>
</div>
';
$counter = 0;
}
}
if ($counter > 0) {
echo '</div>
';
}
?>
答案 4 :(得分:1)
模拟运算符在与行中您想要的项目数进行比较时使用等于零。因此,您可以在那里输出您的起始<div>
。
要添加结束div,您需要检查4的模数是否等于3,或者我们是否已达到项目总数,以防止错过关闭</div>
。
<?php
// set a counter
$rowCount = 0;
// store the total number of categories minus 1 as we will be
// counting from 0 with the counter
$categoryTotal = count($categories) - 1;
foreach($categories as $c){
if($rowCount % 4 == 0){
echo '<div class="row">';
}?>
<div class="col-lg-3 col-md-3""></div>
<?php
// add your closing div if it is the end of a row or if there are no more items
if($rowCount % 4 == 3 || $rowCount == $categoryTotal){
echo '</div>';
}
// increment your counter
$rowCount++;
} ?>
答案 5 :(得分:0)
好吧,将其添加到您的代码中:
//before foreach
$i = 0;
//在关闭前的foreach内部}
$i++;
}//this closes the foreach
然后在添加任何div之前(可能在foreach的开头:
if($i % 4 == 0)
{
echo "<div class='each-four-iterations'>";
}
在$ i ++语句之前,添加:
if($i % 4 == 0)
{
echo "</div>";
}
答案 6 :(得分:0)
<?php
$wrap_count = 2; // you can change this no of divs to wrap
foreach ($categories as $category) :
$i+=1;
if($i%$wrap_count==1):
echo '<div class="row">';
endif;?>
<div class="col-lg-3 col-md-3">.....</div>
if($i%$wrap_count==0) : echo '</div>'; endif; endforeach;
?>
适合我的工作
答案 7 :(得分:0)
我有一个替代选项可能会有效,具体取决于您的数组。
$new_array = array_chunk($your_array, 4);
foreach($new_array as $group_of_$four){
echo '<div class="row">';
foreach($group_of_four as $one){
// Single Item
}
echo '</div>';
}
答案 8 :(得分:0)
试试这个。它对我有用。
<?php $count = 1; ?>
<?php foreach ($model->userProfile->portfolio as $item): ?>
<?php if ($count % 4 == 1): ?>
<div class="row" style="margin-bottom: 30px;">
<?php endif ?>
<div class="col-md-3">
</div>
<?php if ($count % 4 == 0): ?>
</div>
<?php endif ?>
<?php $count++ ?>
<?php endforeach ?>