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

Мне нужно создать случайное изображение из каталога. Я знаю, что просто,

$dire="images/"; $images = glob($dire. '*.{jpg,jpeg,png,gif}', GLOB_BRACE); $randomImage = $images[array_rand($images)]; <input type="image" src="<?=$randomImage;?>" alt="<?=$randomImage;?>" /> 

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

Моя мысль заключается в том, что я должен хранить случайное изображение в массиве и каждый раз проверять массив с созданным случайным образом. Если новое случайное изображение отсутствует в этом массиве, мне нужно отобразить это изображение, иначе мне нужно найти другое изображение.

Я создал приведенный ниже код с мыслью выше.

  $allimgs=array(); $dire="images/"; $images = glob($dire. '*.{jpg,jpeg,png,gif}', GLOB_BRACE); $randomImage = $images[array_rand($images)]; if(!in_array($randomImage,$allimgs)) { $allimgs[]=$randomImage; <input type="image" src="<?=$randomImage;?>" alt="<?=$randomImage;?>" /> } 

Но я все еще придерживаюсь этого кода. Кто-нибудь, пожалуйста, помогите улучшить этот код? или любая другая идея?

Благодарю.

Одной из альтернатив array_rand является тасовка:

 $dire="images/"; $images = glob($dire. '*.{jpg,jpeg,png,gif}', GLOB_BRACE); shuffle($images); 

И затем, чтобы отобразить следующее случайное изображение:

 $randomImage=array_pop($images); 

Когда массив пуст, вы снова вызываете код инициализации. Итак, поставив это вместе:

 $images=array() //Initialize once at top of script $dire="images/"; ... if(count($images)==0){ $images = glob($dire. '*.{jpg,jpeg,png,gif}', GLOB_BRACE); shuffle($images); } $randomImage=array_pop($images); 

(Я намеренно повторил glob (), чтобы все новые изображения были обнаружены на второй итерации.)

PS Я предполагаю, что вы понимаете, что по умолчанию PHP не имеет гражданства. Если каждый раз, когда они посещают страницу (например, ротационное рекламное объявление), это должно давать каждому пользователю другое изображение, тогда код почти такой же, но перемещает массив $images в $_SESSION .

Одно из решений может заключаться в следующем:

 <? // initialize $images shuffle($images); $randomImage = array_pop($images); ?> <input type="image" src="<?=$randomImage;?>" alt="<?=$randomImage;?>" /> 

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

Эти коды помогают вытащить случайные изображения из папки

  <?php $files = glob('photos/*'); natcasesort($files); // Display images foreach($files as $file) { echo '<img src="' . $file . '"/>'; } ?> 

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

 <?php $result = glob('images/*'); shuffle($result); foreach($result as $result) { break; } ?> <img src="<?php echo "$result"; ?>" />