Intereting Posts
Как ограничить специальные символы, кроме подчеркивания, дефиса и точки в поле электронной почты в PHP? страница просмотра – ошибка PHP Как объединить массивы из разных входных значений.? реализация google oauth2 для расширения chrome, взаимодействующего с нашими серверами PHP: проблема отправки формы в AJAX / JSON? Ошибка анализа: синтаксическая ошибка, неожиданные '.', Ожидающие ',' или ';' PHP – Проблемы с удалением «\ r \ n \ r \ n» из этой строки: «Я хотел бы: \ r \ n \ r \ n1.) Сбросить этот беспорядок \ r \ n \ r \ n \ 2.) Теперь Пожалуйста" Установка и включение Xdebug на MAMP PRO Перенаправить * .htm в * .php Как сделать автоматический вход в систему, сохранить сеанс в браузере Как проверить, где Apache ищет файл php.ini? PHP md5 объяснил Измените имя созданного файла Laravel и обновленного_at API-интерфейс Softlayer для немедленного отменить различные продукты или в юбилейную дату Невозможно запросить разрешение на использование Facebook Login API «publish_actions» даже для основного администратора

Новый содержащий div после каждых 3 записей

Я хотел бы создать новый содержащий <div> после 3 результатов, используя цикл результата PDO.

Для моего проекта самообучения я должен создать страницу с загрузочной страницей, и после каждой третьей записи я должен сделать новую строку и снова показать 3 col-md-4 и т. Д. И т. Д.

Теперь у меня это как мой код:

 <div class="row"> <?php while ($row = $stmt->fetch(PDO::FETCH_OBJ)) { ?> <div class="col-md-4"> <div class="product"> <div class="title"><?php echo $row->pname ?></div> <div class="img"><img src="../product/img/<?php echo $row->pnumber ?>/<?php echo $row->pthumbnail ?>.jpg?$pop210x210$"/> </div> <div class="vijftien"></div> <div class="deliver">Levertijd: <strong><?php echo $row->pdelivertime ?></strong></div> <div class="vijf"></div> <div class="other"></div> <div class="row"> <div class="col-md-6"> <div class="price"><?php echo $row->pprice ?></div> </div> <div class="col-md-6"> <div class="order"> <button class="log_in" id="doLogin">Meer informatie</button> </div> </div> </div> </div> </div> <?php } ?> </div> 

Я побывал и изучал другие вопросы, но я действительно не понимаю, как они это делают, и как я могу реализовать правильный метод в своем коде.

Как сказал тадман в комментарии по вашему вопросу. Наилучший подход должен использовать оператор модуля ( % ) с 3 .

Ответ Синан Улькера приведет к нежелательному результату в зависимости от размера массива результатов.

Вот обобщенный пример, чтобы разоблачить проблему:

Используя этот входной массив для представления ваших результатов pdo:

 $rows=["one","two","three","four","five","six"]; 

Условие Синан в конце каждой итерации:

 $i=1; echo "<div class=\"row\">"; foreach($rows as $row){ echo "<div>$row</div>"; if($i%3==0)echo "</div>\n<div class='row'>"; // 6%3==0 and that's not good here // 6%3==0 and will echo the close/open line after the content to create an empty, unwanted dom element $i++; } echo "</div>\n\n"; 

Создадим это:

 <div class="row"><div>one</div><div>two</div><div>three</div></div> <div class='row'><div>four</div><div>five</div><div>six</div></div> <div class='row'></div> //<--- this extra element is not good 

Вместо этого поместите свое условие разделения в начале каждой итерации. ( Демо ) Вот так:

 $x=0; // I prefer to increment starting from zero. // This way I can use the same method inside a foreach loop on // zero-indexed arrays, leveraging the keys, and omit the `++` line. echo "<div class=\"row\">"; foreach($rows as $row){ if($x!=0 && $x%3==0){ // if not first iteration and iteration divided by 3 has no remainder... echo "</div>\n<div class='row'>"; } echo "<div>$row</div>"; ++$x; } echo "</div>"; 

Это создаст:

 <div class="row"><div>one</div><div>two</div><div>three</div></div> <div class='row'><div>four</div><div>five</div><div>six</div></div> 

Позднее редактирование, вот несколько других методов для подобных ситуаций, которые обеспечат тот же результат:

 foreach(array_chunk($rows,3) as $a){ echo "<div class=\"row\"><div>",implode('</div><div>',$a),"</div></div>\n"; } 

или

 foreach ($rows as $i=>$v){ if($i%3==0){ if($i!=0){ echo "</div>\n"; } echo "<div class=\"row\">"; } echo "<div>$v</div>"; } echo "</div>"; 

Вам нужно добавить новый тег закрытия и открыть новую каждую 3-ю итерацию.

  <div class="row"> <?php $sql = "SELECT * FROM products"; $stmt = $conn->query($sql); $stmt->execute(); $i=1; while ($row = $stmt->fetch(PDO::FETCH_OBJ)) { ?> <div class="col-md-4"> <div class="product"> <div class="title"><?php echo $row->pname ?></div> <div class="img"><img src="../product/img/<?php echo $row->pnumber ?>/<?php echo $row->pthumbnail ?>.jpg?$pop210x210$"/> </div> <div class="vijftien"></div> <div class="deliver">Levertijd: <strong><?php echo $row->pdelivertime ?></strong> </div> <div class="vijf"></div> <div class="other"></div> <div class="row"> <div class="col-md-6"> <div class="price"><?php echo $row->pprice ?></div> </div> <div class="col-md-6"> <div class="order"> <button class="log_in" id="doLogin">Meer informatie</button> </div> </div> </div> </div> </div> <?php if($i%3==0)echo "</div><div class='row'>"; $i++; } ?>