【问题标题】:php foreach loop wrap every 2 elements, then every 3 elementsphp foreach 循环包装每 2 个元素,然后每 3 个元素
【发布时间】:2020-06-05 11:47:18
【问题描述】:

我试图将每两个元素包装在一个 div 中,然后将每三个元素包装在一个 foreach 循环中的 div 中。我看过很多关于每 2 或 3 次换行的帖子,但我需要为每组三人组和每组三人组交替布局。

这是我尝试过的代码:

<?php $row = 2; ?>
        <?php $count = 0; ?>
        <?php $i=1;foreach($list as $item) : ?>

            <?php if($count % $row == 0) : ## start 2 row ?>
                <?php $endrow = 1; ?>
                <div class="row double">
            <?php endif; ?>
                    <div class="col-lg-6 col-12">
                        aaa
                    </div>
            <?php if($count % $row == $endrow) : ## end 2 row ?>
                </div>
                <?php $i = 0; ?>
                <?php $row = 3; ?>
                <?php $endrow = 2; ?>
            <?php endif; ?>


            <?php if($count % $row == 0) : ## start 3 row ?>
                <?php $endrow = 2; ?>
                <div class="row triple">
            <?php endif; ?>
                    <div class="col-lg-4 col-12">
                        bbb
                    </div>
            <?php if($count % $row == $endrow) : ## end 3 row ?>
                </div>
                <?php $i = 0; ?>
                <?php $row = 2; ?>
                <?php $endrow = 1; ?>
            <?php endif; ?>


        <?php $count++;$i++;endforeach; ?>

这是输出:

<div class="row double">
    <div class="col-lg-6 col-12"> aaa </div>
<div class="row triple">
    <div class="col-lg-4 col-12"> bbb </div>
    <div class="col-lg-6 col-12"> aaa </div>
    <div class="col-lg-4 col-12"> bbb </div>
<div class="row double">
    <div class="col-lg-6 col-12"> aaa </div>
<div class="row triple">
    <div class="col-lg-4 col-12"> bbb </div>
    <div class="col-lg-6 col-12"> aaa </div>
    <div class="col-lg-4 col-12"> bbb </div>
<div class="row double">
    <div class="col-lg-6 col-12"> aaa </div>
<div class="row triple">
    <div class="col-lg-4 col-12"> bbb </div>
    <div class="col-lg-6 col-12"> aaa </div>
    <div class="col-lg-4 col-12"> bbb </div>
<div class="row double">
    <div class="col-lg-6 col-12"> aaa </div>
<div class="row triple">
    <div class="col-lg-4 col-12"> bbb </div>

但这就是我想要实现的目标:

<div class="row double">
    <div class="col-lg-6 col-12"> aaa </div>
    <div class="col-lg-6 col-12"> aaa </div>
</div>
<div class="row triple">
    <div class="col-lg-4 col-12"> bbb </div>
    <div class="col-lg-4 col-12"> bbb </div>
    <div class="col-lg-4 col-12"> bbb </div>
</div>
<div class="row double">
    <div class="col-lg-6 col-12"> aaa </div>
    <div class="col-lg-6 col-12"> aaa </div>
</div>
<div class="row triple">
    <div class="col-lg-4 col-12"> bbb </div>
    <div class="col-lg-4 col-12"> bbb </div>
    <div class="col-lg-4 col-12"> bbb </div>
</div>
<div class="row double">
    <div class="col-lg-6 col-12"> aaa </div>
    <div class="col-lg-6 col-12"> aaa </div>
</div>

任何帮助,或指出正确的方向将不胜感激!

【问题讨论】:

    标签: php html loops foreach


    【解决方案1】:

    使用嵌套循环。外部循环计数为 5,然后是两个内部循环,打印两个元素,然后打印三个元素。

    $len = count($list);
    for($i = 0; $i < $len; $i += 5) {
        echo '<div class="row double">';
        for ($j = $i; $j < min($len, $i+2); $j++) {
            echo '<div class="col-lg-6 col-12">' . $list($j) . '</div>';
        }
        echo '</div>';
        if ($j >= $len) {
            break;
        }
        echo '<div class="row triple">';
        for (; $j < min($len, $i + 3); $j++) {
            echo '<div class="col-lg-4 col-12">' . $list($j) . '</div>';
        }
        echo '</div>';
    }
    

    【讨论】:

    • 非常感谢,这很有效 - 尽管第二个 for 循环丢失了 $j = $i :)
    • 第二个循环不是从$i重新开始,而是从第一个循环结束的$j的值开始。
    猜你喜欢
    • 2018-02-11
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    • 1970-01-01
    相关资源
    最近更新 更多