每 3 条记录后包含一个新的 div [英] New containing div after every 3 records

查看:49
本文介绍了每 3 条记录后包含一个新的 div的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在 3 个结果之后创建一个包含

的新文件,使用 PDO 结果循环.

对于我的自学项目,我必须使用引导程序制作一个产品页面,并且在每第三条记录之后我必须创建一个新行并再次显示 3 个 col-md-4 等.

现在我把这个作为我的代码:

<?phpwhile ($row = $stmt->fetch(PDO::FETCH_OBJ)) {?><div class="col-md-4"><div class="product"><div class="title"><?php echo $row->pname ?></div><div class="img"><imgsrc="../product/img/<?php echo $row->pnumber ?>/<?php echo $row->pthumbnail ?>.jpg?$pop210x210$"/>

<div class="vijftien"></div><div class="deliver">Levertijd: <strong><?php echo $row->pdelivertime ?></strong></div><div class="vijf"></div><div class="other"></div><div class="row"><div class="col-md-6"><div class="price"><?php echo $row->pprice ?></div>

<div class="col-md-6"><div class="订单"><button class="log_in" id="doLogin">Meer 信息</button>

<?php } ?>

我访问并研究了其他问题,但我并不真正了解他们是如何做的,以及如何在我的代码中实现正确的方法.

解决方案

正如 tadman 在您的问题下的评论中所述.最好的方法应该使用模运算符 (%) 和 3.

在每次迭代开始时放置分离条件.(演示)

像这样:

$x=0;//我更喜欢从零开始递增.//这样我就可以在 foreach 循环中使用相同的方法//零索引数组,利用键,并省略 `++` 行.echo "

";foreach($rows 作为 $row){if($x!=0 && $x%3==0){//如果不是第一次迭代并且迭代除以 3 没有余数...echo "</div> <div class='row'>";}echo "<div>$row</div>";++$x;}回声</div>";

这将创建:

one

<div class='row'><div>四</div><div>五</div><div>六</div></div>

<小时>

后期编辑,这里有一些其他类似情况的方法,它们将提供相同的结果:

foreach(array_chunk($rows,3) as $a){echo "<div class="row"><div>",implode('</div><div>',$a),"</div></div>
";}

foreach ($rows as $i=>$v){如果($i%3==0){如果($i!=0){echo "</div>
";}echo "

";}echo "<div>$v</div>";}回声</div>";

<小时>

澄清不该做什么...

Sinan Ulker 的回答会导致不想要的结果,具体取决于结果数组的大小.

这是一个暴露问题的通用示例:

使用这个输入数组来表示你的 pdo 结果:

$rows=["一","二","三","四","五","六"];

每次迭代结束时思南的条件:

$i=1;echo "

";foreach($rows 作为 $row){echo "<div>$row</div>";if($i%3==0)echo "</div> <div class='row'>";//6%3==0 这在这里不好//6%3==0 并且将在内容之后回显关闭/打开行以创建一个空的、不需要的 dom 元素$i++;}echo "</div> ";

将创建此:

one

<div class='row'><div>四</div><div>五</div><div>六</div></div><div class='row'></div>//<--- 这个额外的元素不好

I would like to create a new containing <div> after 3 results, using PDO result loop.

For my self-study-project I have to made a product page with bootstrap and after every 3rd record I have to make a new row and show again 3 col-md-4's, etc, etc.

Now I have this as my code:

<div class="row">
    <?php
    while ($row = $stmt->fetch(PDO::FETCH_OBJ)) {
    ?>
        <div class="col-md-4">
            <div class="product">
                <div class="title"><?php echo $row->pname ?></div>
                <div class="img"><img
                    src="../product/img/<?php echo $row->pnumber ?>/<?php echo $row->pthumbnail ?>.jpg?$pop210x210$"/>
                </div>
                <div class="vijftien"></div>
                <div class="deliver">Levertijd: <strong><?php echo $row->pdelivertime ?></strong></div>
                <div class="vijf"></div>
                <div class="other"></div>
                <div class="row">
                    <div class="col-md-6">
                        <div class="price"><?php echo $row->pprice ?></div>
                    </div>
                    <div class="col-md-6">
                        <div class="order">
                            <button class="log_in" id="doLogin">Meer informatie</button>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    <?php } ?>
</div>

I have visited and studied other questions but I do not really get the idea of how they are doing it and how I can implement the correct method into my code.

解决方案

As tadman stated in the comment under your question. The best approach should use a modulus operator (%) with 3.

Place your separating condition at the start of each iteration. (Demo)

Like this:

$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>
<div class='row'>";
        }
        echo "<div>$row</div>";
        ++$x;
    }
echo "</div>";

This will create:

<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>


Late Edit, here are a couple of other methods for similar situations which will provide the same result:

foreach(array_chunk($rows,3) as $a){
    echo "<div class="row"><div>",implode('</div><div>',$a),"</div></div>
";
}

or

foreach ($rows as $i=>$v){
    if($i%3==0){
        if($i!=0){
            echo "</div>
";
        }
        echo "<div class="row">";
    }
    echo "<div>$v</div>";
}
echo "</div>";


To clarify what NOT to do...

Sinan Ulker's answer will lead to an unwanted result depending on the size of your result array.

Here is a generalized example to expose the issue:

Using this input array to represent your pdo results:

$rows=["one","two","three","four","five","six"];

Sinan's condition at the end of each iteration:

$i=1;
echo "<div class="row">";
    foreach($rows as $row){
        echo "<div>$row</div>";
        if($i%3==0)echo "</div>
<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>

";

Will create this:

<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

这篇关于每 3 条记录后包含一个新的 div的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
PHP最新文章
热门教程
热门工具
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆