В цикле я хочу обернуть первые 5 элементов в li
, а после этого каждые 6 элементов в li
. Я пытаюсь выполнить код, но он работает неправильно, он обертывает первые 5 элементов в li
, и после этого он обертывает только каждый шестой элемент в li, но 7-12-й без ли.
$i = 0; while ($i < 19){ $i++; if($i == 1 ){ echo '<li>'; } if (($i > 5) AND ( $i % 6 == 0)){echo "<li>";} echo "<div>item " . $i . "</div>"; if( $i == 5 ){ echo '</li>'; } if(($i > 5) AND ( $i % 6 == 0)) { echo "</li>"; } } if ($i < 5 ) { echo "</li>"; } if (($i > 5) AND ($i % 6 != 0)) { echo "</li>"; }
Попробуйте это решение:
for ($i = 1; $i < 20; $i++) { echo ($i === 1 || $i % 6 === 0) ? "<li>" : null, "<div>item {$i}</div>", ($i % 6 === 5) ? "</li>" : null; } if ($i % 6 !== 0) echo "</li>";
Я старался держать его как можно проще.
Пример кода
Здесь более чистое и легко читаемое решение.
$i = 0; $group = 0; $group_by = 5; while ($i < 19){ $i++; if ($group == 0) {//new group start echo "<li>"; } echo "<div>item " . $i . "</div>"; $group++; if ($group == $group_by) {//end of group echo "</li>\n"; $group = 0; $group_by = 6; } } if ($group != 0) { echo "</li>"; }//end group if it was not closed
Это потому, что ваше состояние говорит $i % 6 == 0
что означает «каждый шестой элемент», а не 6 элементов.
Чтобы обернуть 6 последовательных элементов, т. Е. От 7 до 12, вы должны переписать свое условие на $i <= 12
, чтобы ваш код стал:
$i = 0; for (; $i < 19; $i++) { if($i == 1 ){ echo '<li>'; } if (($i > 5) AND ( $i <= 12)){echo "<li>";} echo "<div>item " . $i . "</div>"; if( $i == 5 ){ echo '</li>'; } if(($i > 5) AND ( $i <= 12)) { echo "</li>"; } } if ($i < 5 ) { echo "</li>"; } if (($i > 5) AND ($i <= 12)) { echo "</li>"; }