Я задаюсь вопросом о «лучшем» способе вытаскивания случайного изображения из папки.
Например, чтобы php просто выбирал случайное изображение из папки вместо поиска и создания массива.
вот как я это делаю сегодня
<?php $extensions = array('jpg','jpeg'); $images_folder_path = ROOT.'/web/files/Header/'; $images = array(); srand((float) microtime() * 10000000); if ($handle = opendir($images_folder_path)) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { $ext = strtolower(substr(strrchr($file, "."), 1)); if(in_array($ext, $extensions)){ $images[] = $file; } } } closedir($handle); } if(!empty($images)){ $header_image = $images[array_rand($images)]; } else { $header_image = ''; } ?>
Попробуй это:
<?php $dir = "images/"; $images = scandir($dir); $i = rand(2, sizeof($images)-1); ?> <img src="images/<?php echo $images[$i]; ?>" alt="" />
Ниже код проверяет список изображений по расширению изображения.
<?php function validImages($image) { $extensions = array('jpg','jpeg','png','gif'); if(in_array(array_pop(explode(".", $image)), $extensions)) { return $image; } } $images_folder_path = ROOT.'/web/files/Header/'; $relative_path = SITE_URL.'/web/files/Header/'; $images = array_filter(array_map("validImages", scandir($images_folder_path))); $rand_keys = array_rand($images,1); ?> <?php if(isset($images[$rand_keys])): ?> <img src="<?php echo $relative_path.$images[$rand_keys]; ?>" alt="" /> <?php endif; ?>
function get_rand_img($dir) { $arr = array(); $list = scandir($dir); foreach ($list as $file) { if (!isset($img)) { $img = ''; } if (is_file($dir . '/' . $file)) { $ext = end(explode('.', $file)); if ($ext == 'gif' || $ext == 'jpeg' || $ext == 'jpg' || $ext == 'png' || $ext == 'GIF' || $ext == 'JPEG' || $ext == 'JPG' || $ext == 'PNG') { array_push($arr, $file); $img = $file; } } } if ($img != '') { $img = array_rand($arr); $img = $arr[$img]; } $img = str_replace("'", "\'", $img); $img = str_replace(" ", "%20", $img); return $img; } echo get_rand_img('images');
замените «изображения» на вашу папку.
В течение нескольких часов я искал в Интернете, чтобы реализовать код, который я хотел. Я собрал несколько различных ответов, которые я нашел в Интернете. Вот код:
<?php $folder = opendir("Images/Gallery Images/"); $i = 1; while (false != ($file = readdir($folder))) { if ($file != "." && $file != "..") { $images[$i] = $file; $i++; } } //This is the important part... for ($i = 1; $i <= 5; $i++) { //Starting at 1, count up to 5 images (change to suit) $random_img = rand(1, count($images) - 1); if (!empty($images[$random_img])) { //without this I was sometimes getting empty values echo '<img src="Images/Gallery Images/' . $images[$random_img] . '" alt="Photo ' . pathinfo($images[$random_img], PATHINFO_FILENAME) . '" />'; echo '<script>console.log("' . $images[$random_img] . '")</script>'; //Just to help me debug unset($images[$random_img]); //unset each image in array so we don't have double images } } ?>
не<?php $folder = opendir("Images/Gallery Images/"); $i = 1; while (false != ($file = readdir($folder))) { if ($file != "." && $file != "..") { $images[$i] = $file; $i++; } } //This is the important part... for ($i = 1; $i <= 5; $i++) { //Starting at 1, count up to 5 images (change to suit) $random_img = rand(1, count($images) - 1); if (!empty($images[$random_img])) { //without this I was sometimes getting empty values echo '<img src="Images/Gallery Images/' . $images[$random_img] . '" alt="Photo ' . pathinfo($images[$random_img], PATHINFO_FILENAME) . '" />'; echo '<script>console.log("' . $images[$random_img] . '")</script>'; //Just to help me debug unset($images[$random_img]); //unset each image in array so we don't have double images } } ?>
Используя этот метод, я смог реализовать opendir без ошибок (поскольку glob()
не работал для меня), я смог вытащить 5 изображений для галереи карусели и избавиться от дубликатов изображений и разобраться в пустых значениях. Один недостаток использования моего метода заключается в том, что количество снимков варьируется от 3 до 5 изображений в галерее, вероятно, из-за удаления пустых значений. Который не беспокоил меня слишком много, поскольку он работает по мере необходимости. Если кто-то может улучшить мой метод, я приветствую вас сделать это. Рабочий пример (первая галерея карусели на вершине веб-сайта): Eastfield Joinery