simple world Ответов: 3

Отображение элементов массива по числу (x) за один раз в PHP


Привет.
У меня есть проект веб-сайта с двумя файлами.
В первом файле у меня есть форма для загрузки изображений в мою базу данных в таблице под названием images.
Во втором файле я извлекаю эти изображения и отображаю их с помощью цикла while.
Теперь я хочу отобразить эти изображения в определенном стиле и макете
<div>
<img />
<img />
<img />
</div>

<div>
<img />
<img />
<img />
</div>

<div>
<img />
<img />
<img />
</div>


Поэтому каждые несколько изображений я хочу отображать их внутри div.
Например, первые 3 изображения отображают их в div.
Затем следующие 3 и так далее.
Как я могу этого достичь?
Мой код дисплея находится ниже.

Что я уже пробовал:

<?php
                if (mysqli_num_rows($result) > 0)
                {

                      while ($row = mysqli_fetch_array($result)) {
                        echo "<div>";
                        echo "<a href='admin/images/".$row['image']."'>";
                          echo "<img src='admin/images/".$row['image']."' >";
                          echo "<h3>".$row['image_text']."</h3>";
                          echo "</a>";
                          echo "</div>";
                      }

                }
                else {
                    echo "0 results";
                }
                  ?>

3 Ответов

Рейтинг:
20

W∴ Balboos, GHB

Простое решение-создать и использовать внутренний счетчик в твоей петле.

Инициализируйте его до нуля
Проверьте: если счетчик == 0, запустите div.
изображение
увеличивает счетчик.
Когда счетчик = 3, Сброс до 0 закрывает div.

Новый div запускается, если цикл продолжается после сброса до нуля.

Наконец, когда цикл заканчивается, закройте div, если счетчик != 0.


simple world

Да, это сработало очень хорошо.
Большое спасибо

Рейтинг:
1

simple world

Это мой новый обновленный код.



<?php
                  $i=0;
                  if (mysqli_num_rows($result) > 0)
                  {

                        while ($row = mysqli_fetch_array($result)) {

                          if ($i == 0) {
                            echo "<div>";

                          }
                          echo "<a href='admin/images/".$row['image']."'>";
                            echo "<img src='admin/images/".$row['image']."' >";
                            echo "<h3>".$row['image_text']."</h3>";
                            echo "</a>";
                            $i++;


                            if ($i == 3) {
                              echo "</div>";
                                $i = 0;
                            }



                        }

                  }
                  else {
                      echo "0 results";
                  }
                    ?>


Patrice T

И он работает с 4 или 5 изображениями ?

simple world

Да, это прекрасно работает.
У меня есть 4 разных тега div, и каждый из них теперь содержит 5 изображений.
А если захочу, то положу еще.
Еще раз благодарю вас обоих.

Patrice T

Нет, я имею в виду для 3+1 изображений

<div>
	<img />
	<img />
	<img />
</div>
<div>
	<img />
</div>

simple world

если у меня есть 10 изображений в моей базе данных, я получаю 2 divs с 5 изображениями в них.
Но если у меня есть 11 изображений, я получаю 3 дива, первые 2 имеют в себе 5 изображений, а 3-й-1.

Patrice T

с этим кодом ?

simple world

Да.
Я отлично работаю.

Patrice T

Я имею в виду:

<div>
	<img />
	<img />
	<img />
</div>
<div>
	<img />
</div> // this end div is missing with your code

simple world

Нет, это не так.
Все на своих местах.
Я проверил код, и он очень хорош.

Рейтинг:
0

Patrice T

Цитата:
Все это отлично работает, но я хочу, чтобы каждое (x) число создавало новый div с указанными в нем тегами.

Как я понимаю, у вас есть:
<div>
	<img />
</div>
<div>
	<img />
</div>
<div>
	<img />
</div>
<div>
	<img />
</div>
<div>
	<img />
</div>
<div>
	<img />
</div>
<div>
	<img />
</div>
<div>
	<img />
</div>

а ты хочешь:
<div>
	<img />
	<img />
	<img />
</div>
<div>
	<img />
	<img />
	<img />
</div>
<div>
	<img />
</div>

или:
<div>
	<img />
	<img />
	<img />
</div>

ваш код будет иметь такую структуру:
printed_images=0
echo <div> // once
loop on images
    {
    if (printed_images == 3)
        { // once every 3 images
        echo <div>
        echo </div>
        printed_images=0
        }
    echo <img /> // once per image
    printed_images++
    }
echo </div> // once


simple world

Здравствуйте, спасибо за ваши ответы, но нет, он не работает так, как мне нужно.
Вот что мне нужно.
У меня есть таблица базы данных с 9 изображениями.
я хочу отобразить все эти 9 изображений в 3 разных тегах.
что-то вроде этого:
див.
НВФ
НВФ
НВФ
див.

див.
НВФ
НВФ
НВФ
див.

див.
НВФ
НВФ
НВФ
див.

но каждый раз, когда published_images возвращается к 0 в условиях if, он снова начинается с изображения 1.
То, что я хочу, это цикл в возвращаемом массиве и перейти к 0,1,2 отображать их 3,4,5 отображать их 6,7,8 отображать их.
и представьте себе, что количество изображений в базе данных неизвестно, поэтому я не могу просто перейти к массиву echo[index0] и так далее.
Надеюсь ты меня понимаешь

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
и покажите новый код.

simple world

я сделал это.

Patrice T

и вы обновили код ?

simple world

Патрис Т спасибо Вам за помощь.
Но первый пост был тем, что я искал.
Я очень ценю вашу помощь