Я хочу отобразить случайное n количество изображений из папки. В настоящее время я использую этот скрипт для отображения изображений
<?php $dir = './images/gallery/'; foreach(glob($dir.'*.jpg') as $file) { ?> <div class="item"><img src="<?php=$file;?>"></div> <?php } ?>
Я хочу только 10 (или n число) изображений, что слишком случайно. Как это сделать?
Метод shuffle()
будет помещать элементы данного массива в случайный порядок:
<?php $dir = './images/gallery/'; function displayImgs($dir, $n=10){ $files = glob($dir.'*.jpg'); shuffle($files); $files = array_slice($files, 0, $n); foreach($files as $file) { ?> <div class="item"><img src="<?php=$file;?>"></div> <?php } } ?>
Использование: displayImgs ("/ dir / temp / path", 20);
Ну, это может быть излишним, но вы также можете использовать итератор каталогов и некоторую случайность для достижения этого. Я использовал модифицированную версию функции генерации случайных чисел из этого ответа.
убедитесь, что путь, который вы передаете функции, относится к каталогу, в котором находится скрипт, с косой чертой в начале. Константы __DIR__
не изменятся, если вы случайно вызовете этот скрипт из разных мест в иерархии файлов.
<?php function randomImages($path,$n) { $dir = new DirectoryIterator(__DIR__. $path); // we need to know how many images we can range on // but we do not want the two special files . and .. $count = iterator_count($dir) - 2; // slightly modified function to create an array containing n random position // within our range $positionsArray = UniqueRandomNumbersWithinRange(0,$count-1,$n); $i = 0; foreach ($dir as $file) { // those super files seldom make good images if ($file->getFilename() === '.' || $file->getFilename() === '..') continue; if (isset($positionsArray[$i])) echo '<div class="item"><img src="'.$file->getPathname().'"></div>'; $i++; // change the count after the check of the filename, // because otherwise you might overflow } } function UniqueRandomNumbersWithinRange($min, $max, $quantity) { $numbers = range($min, $max); shuffle($numbers); return array_flip(array_slice($numbers, 0, $quantity)); }
Используйте встроенную функцию Random, называемую rand()
:
<?php $dir = './images/gallery/'; for($i=0;$i<=10;$i++) { echo '<div class="item"><img src="'.$dir.rand(1,10).'.jpg"></div>'; } ?>
Давайте сначала создадим массив и введем в него некоторые случайные числа. И согласно вам пусть $n
будет 10
.
$n = 10; $arr = array(); for($i = 1; $i <= $n; $i++){ /* Where $n is the limit */ $rand = rand($n); array_push($arr, $rand); }
Итак, теперь у нас есть массив, содержащий случайные цифры, и теперь нам нужно эхо-изображения, итерации по массиву:
foreach($arr as $image){ $intToStr = (string) $image; foreach(glob($dir. $intToStr . '.jpg') as $file){ echo "<div class='item'>$file</div>"; } }
Это отразится на ваших изображениях.