@DenJel

Автоматический счетчик? Разметка в цикле?

Здравствуйте, я новичек, так что не серчайте особо. У меня выводятся записи циклом из базы вот в такой разметке
<div class="container">
	<div class="row">
		<div class="col-md-4 col-xs-12">Запись 1</div>
		<div class="col-md-4 col-xs-12">Запись 2</div>
		<div class="col-md-4 col-xs-12">Запись 3</div>
	</div>
	<div class="row">
		<div class="col-md-4 col-xs-12">Запись 4</div>
		<div class="col-md-4 col-xs-12">Запись 5</div>
		<div class="col-md-4 col-xs-12">Запись 6</div>
	</div>
</div>
<row>

Мне нужно вставлять открывающий row на 1ой 4ой 7ой и т.д итерации цикла, а закрывающий row на 3ей, 6ой, 9ой и т.д, я сделал 2 счетчика, первый начинется с 1 и сравнивается со вторым который подставляется в формулы вида: 3n+1 и 3n+3 соответственно, но тут возникли проблемы, так как второй счетчик надо увеличивать не при каждом выполнении тела цикла. Есть ли в PHP что-нибудь аналогичное формуле в nth-of-type которая автоматически принимает значения?? Или как это реализовать без особого геморроя?
  • Вопрос задан
  • 213 просмотров
Решения вопроса 3
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Алгоритм, на самом деле, довольно прост:
<div class="container">
<div class="row">
<?php
for($i = 0; $i < 10; $i++)
{
	echo '<div class="col-md-4 col-xs-12">Запись '.$i.'</div>';
	
	if ($i % 3 == 2)
	{
		echo '</div>';
		echo '<div class="row">';
	}
}
?>
</div>
</div>

У него есть один недостаток - в конце может получиться пустой .row, но этого можно избежать, добавив проверку на последнюю итерацию:
$ar = range(0, 11);
$size = count($ar) - 1;

foreach($ar as $i => $v)
{
	echo '<div class="col-md-4 col-xs-12">Запись '.$v.'</div>';
	
	if ($v % 3 == 2 && $i < $size)
	{
		echo '</div>';
		echo '<div class="row">';	
	}
}
Ответ написан
Комментировать
frost18
@frost18
Программист PHP
Попробуйте определять по остатку от деления, к примеру
for($i = 0; $i < 20; ++$i){
    if($i%2){
        echo $i.'<br/>';
    }
}
Ответ написан
Комментировать
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
n: 1,2,3,4,......................
:x
n%3===1 (1,4,7)
n%3===0 (3,6,9)
loop x
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы