PHP отображает случайные n изображений из каталога

Я хочу отобразить случайное 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>"; } } 

Это отразится на ваших изображениях.