代码之家  ›  专栏  ›  技术社区  ›  Leanne Seawright

php foreach循环每2个元素包装一次,然后每3个元素包装一次

  •  0
  • Leanne Seawright  · 技术社区  · 5 年前

    我尝试将每个元素包装在一个div中,然后将每个元素包装在一个foreach循环中。我看过很多关于每2或3个包装的帖子,但我需要为每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>
    

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

    1 回复  |  直到 5 年前
        1
  •  2
  •   Barmar    5 年前

    使用嵌套循环。外层循环计数为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>';
    }