Выбрать из папки картинки случайным образом PHP

При разработке различных модулей на PHP иногда требуется вывести из директории картинки случайным образом, например 10 из 100. Но что делать, если нам нужно вывести картинки из подпапок?

Разберем сначала первый вариант, а именно, как вывести через php картинки из определенной директории. Для этого будем использовать функцию glob:

Пусть картинки содержатся в директории /images/foto/fevral. Тогда код будет следующим:

$filesall2 = glob($_SERVER['DOCUMENT_ROOT'].'/images/foto/fevral/*.{jpg,gif,png,jpeg}', GLOB_BRACE);
for($idfilesall2 = 0; $idfilesall2<count($filesall2); $idfilesall2++) {
echo '<img style="width:70px;" src="/images/foto/fevral/'.pathinfo($filesall2[$idfilesall2], PATHINFO_BASENAME).'">';
}

Скрипт найдет и отобразит все фотографии из папки /images/foto/fevral с расширениями jpg, gif, png, jpeg и выведет их на экран за счет echo.

Чтобы сортировать картинки по убыванию добавления (т.е. последние добавленные показываются первыми) добавьте перед for строку: rsort($filesall2);

Чтобы они всегда показывались случайном образом, добавьте перед for строку: shuffle($filesall2);

Давайте теперь соберем код и ограничем показ фото до 5 штук за раз:

$filesall2 = glob($_SERVER['DOCUMENT_ROOT'].'/images/foto/fevral/*.{jpg,gif,png,jpeg}', GLOB_BRACE);
shuffle($filesall2);
for($idfilesall2 = 0; ($idfilesall2<count($filesall2) && $idfilesall2<5); $idfilesall2++) {
echo '<img style="width:70px;" src="/images/foto/fevral/'.pathinfo($filesall2[$idfilesall2], PATHINFO_BASENAME).'">';
}

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

Но, что если усложнить задачу? Предположим, нам нужно показать все фотографии из всех подпапок случайным образом. Для этого нужно просканировать каждую папку на наличие фотографий и отобразить их при необходимости. Пусть структура папок будет такая:

/images/foto/galery1
/images/foto/galery2
/images/foto/galery3
/images/foto/galery4
/images/foto/galery5

Родительская папка: /images/foto, а внутри galery1-galery5 будут фото.

$folder = '/images/foto/'; //родительская папках где делаем поиск картинок
$files = scandir($_SERVER['DOCUMENT_ROOT'].$folder);
foreach($files as $file) {
if (($file == '.') || ($file == '..')) continue;
$f0 = $_SERVER['DOCUMENT_ROOT'].$folder.$file;
if (is_dir($f0)) {
$masspapki[] = $file; //добавляем в массив все встретившиеся папки
//добавляем картинки в каждой подпапке в массив $massimg
$filesall = glob($_SERVER['DOCUMENT_ROOT'].$folder.$file.'/*.{jpg,gif,png,jpeg}', GLOB_BRACE);
for($idfilesall = 0; $idfilesall<count($filesall); $idfilesall++) {
$massimg[] = $folder.$file.'/'.pathinfo($filesall[$idfilesall], PATHINFO_BASENAME);
} }
}

//перемешиваем массив с картинками и выводим 20 шт.
shuffle($massimg);
for($afrtt2 = 0; ($afrtt2 <= count($massimg) && $afrtt2<20); $afrtt2++) {
//echo $massimg[$afrtt2].'<br>';
echo '<img style="width:70px;" src="'.$massimg[$afrtt2].'">';
}

//выводим встретившиеся подпапки
for($afrtt = 0; $afrtt <= count($masspapki); $afrtt++) {
echo $masspapki[$afrtt].'<br>';
}

Т.е. скрипт сканирует /images/foto/ на подпапки. Если находит такую, то загружает ссылки на картинки в массив $massimg (если есть картинки в /images/foto/, то пропускает их. Также пропустит подпапки в подпапках, если они будут).

На выходе вы получите 20 рэндомных картинок и папки, которые встретились скрипту (можно скрыть).

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *


Введите капчу: