PHP - закрытие div с помощью вложенных циклов - PullRequest
0 голосов
/ 15 октября 2018

У меня есть папка с 400 изображениями.Я хотел бы разместить их на странице, размещая только восемь одновременно.Это означает, что у меня будут все изображения на одной странице, но они будут разделены на части из восьми изображений, завернутых в коробку, например:

<div class="eightbox">
	<img src="image1">
	<img src="image2">
	<img src="image3">
	<img src="image4">
	<img src="image5">
	<img src="image6">
	<img src="image7">
	<img src="image8">
</div>
<div class="eightbox">
	<img src="image9">
	<img src="image9">
	<img src="image10">
	<img src="image11">
	<img src="image12">
	<img src="image13">
	<img src="image14">
	<img src="image15">
</div>

Теперь мой код для этого пока делает вывод, но не закрывает «восьмерку», так что каждый новый div находится внутри другого.

Вот мой код:

<?php
$files = glob("images/*.*"); //loads all the images from my folder into an array

$y = ceil(count($files)/8); // The amount of images divided by eight and rounded up
$z = 1; //This counter makes the array continue outside the loop

for ($i=1; $i<$y; $i++)
{
	echo '<div class=\'eightbox\'>';
	
	for ($q=0; $q<8; $q++)
	{
		$num = $files[$z];
		echo '<img src=\'' . $num . '\' >';
		$z++;
	}
	
	echo '</div>';
}
?>

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

РЕДАКТИРОВАТЬ: по многочисленным просьбам вот скриншот кода яПолучение с Chrome: Скриншот моего кода

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Используя Modulo, вы можете сделать это

<?php

$files = glob("images/*.*"); //loads all the images from my folder into an array


foreach ( $files as $idx=>$file) {

    if ( $idx % 8 == 0 && $idx != 0){  // every 8 close a div and open a new one
        echo '</div>';
        echo '<div class="eightbox">';
    }
    if ( $idx == 0 ){  // output first div
        echo '<div class="eightbox">';
    }
    echo "<img src='$file'>";

}

if ( $idx+1 % 8 != 0 ) { // close the last div
    echo '</div>';
}
?>
0 голосов
/ 15 октября 2018

Альтернатива, которая разбивает файлы на части по 8 (используя array_chunk()), а затем выводит каждый кусок за раз ...

$split = array_chunk($files, 8);
foreach ( $split as $div )  {
    echo '<div class=\'eightbox\'>';

    foreach ($div as $file )    {
        echo '<img src=\'' . $file . '\' />';
    }

    echo '</div>';
}

Или используя implode()выводить данные ...

$split = array_chunk($files, 8);
foreach ( $split as $div )  {
     echo '<div class=\'eightbox\'><img src=\''.
          implode('\' /><img src=\'', $div).
          '\' /></div>';
}

, которые, IMHO, немного менее читабельны, но более компактны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...