php foreach l oop переносить каждые 2 элемента, затем каждые 3 элемента - PullRequest
1 голос
/ 21 февраля 2020

Я пытаюсь обернуть каждые два элемента в div, а затем каждые три элемента в div в foreach l oop. Я видел много постов, касающихся обертывания каждые 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 Ответ

2 голосов
/ 21 февраля 2020

Использовать вложенные циклы. Внешний l oop считает 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>';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...