Как отобразить определенный контент после получения 4 строк в базе данных MySQL

Я делаю бэкэнд-систему, и отображаемый продукт со страницы индекса должен следовать системе сетки. Например, у меня есть 8 продуктов из базы данных MySql. Я хочу разделить их на 2 ряда по 4 продукта в каждом. Так что мой PHP-код будет выглядеть так:

<div class="row">
<?php
$result = mysqli_query($conn, "SELECT * FROM products");
while ($row = mysqli_fetch_array($result)) {
?>
<div class="col-dsk-4"><?php echo $row["name"]; ?></div>
<?php
}
?>
</div>

Как вы можете видеть в коде, я хочу после того, как повторил 4 раза (4 раза <div class="col-dsk-4">), цикл while завершается, затем продолжается новый <div class="row"> пока он не перебирает все элементы таблицы MySql.

Мое решение правильно или нет? Если так, пожалуйста, помогите мне, в противном случае, пожалуйста, покажите мне свое решение.

1

Решение

Вы можете попробовать код ниже.

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

я использую count диктовать, когда <div class="row"> должны быть добавлены.
На первый и каждый 4-й элемент следует добавить новую строку.

Я также обновил способ, которым я звоню <?php ?> так легче / чище читать.

Если у вас есть какие-либо вопросы, дайте мне знать:

<?php $result = mysqli_query($conn, "SELECT * FROM products"); ?>
<?php $rows = mysqli_fetch_array($result); ?>

<!-- Use count to decide when to put a new div with class 'row' -->
<?php $count = 1; ?>

<?php foreach ($rows as $key => $row) { ?>

<!-- Create a new div with class 'row' on the first item + everytime theres a 4th one -->
<?php if ($count == 1 || ($count % 4 == 0)) { ?>
<div class="row">
<?php } ?>

<div class="col-dsk-4">
<?php echo $row["name"]; ?>
</div>

<!-- Close div with class 'row' everytime theres a 4th one -->
<?php if ($count == 1 || ($count % 4 == 0)) { ?>
</div>
<?php } ?>

<!-- Increment the count -->
<?php $count++; ?>
<?php } ?>
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]