使用PHP显示文件夹中的随机图像,无需重复

时间:2018-04-01 09:58:21

标签: php image random duplicates

我试图在我的网站上的一个目录中显示一定数量的随机图像,而不显示重复项。

我发现了这个问题:Display 2 random pictures PHP with no duplicates部分回答了我的问题:

<?php
$pics = array('image1.jpg', 'image2.jpg', 'image3.jpg', 'image4.jpg');
$images = array_rand($pics, 2);
?>

<img src="images/<?php echo $pics[$images[0]]; ?>" />
<img src="images/<?php echo $pics[$images[1]]; ?>" />

我遇到的问题是图像上传到具有完全不同/随机名称的文件夹,例如1a2265fg65444.jpg 55v4423097ww6.jpg等,所以我无法手动将它们添加到$ pics数组中。我需要以某种方式刮取目录* .jpg并自动生成数组

我确实尝试过Michal Robinsons在Show Random images from a folder without repeating using JS or PHP上的回答但由于某种原因无法打印任何东西:

$all_images = glob("/images/photos/{*.jpg}", GLOB_BRACE);
shuffle($all_images); 
$images = array();
foreach ($all_images as $index => $image) {
     if ($index == 15) break;  // Only print 15 images
     $image_name = basename($image);
     echo "<img src='/images/photos/{$image_name}' />";
}

也许我错过了什么?

任何指针都会非常棒。

非常感谢

2 个答案:

答案 0 :(得分:3)

试试这个

$scan = scandir("/images/photos/");
shuffle($scan);
$r = rand(2, count($scan)); // maybe (count($scan) - 1)
printf("<img src='/images/photos/%s' />", basename($scan[$r]));

答案 1 :(得分:0)

感谢Aron,但我设法通过更改来修复它:

glob("/images/photos/ to 
glob("images/photos/

为了使事情进一步复杂化,我只是意识到我需要从第一个文件夹中显示1个图像,然后从第2个文件夹中显示另一个图像,并重复此约5次,仍然没有显示任何重复:/这是至于我有,但似乎正在挖掘一个不起作用的更大的洞,因为我被困在了foreach ......:

$all_images1 = glob("images/photos/{*.jpg}", GLOB_BRACE);
$all_images2 = glob("images/photos1/{*.jpg}", GLOB_BRACE);
shuffle($all_images1); 
shuffle($all_images2); 
$images1 = array();
$images2 = array();
$class = 1; 
foreach ($all_images1 as $index1 => $image1) {
if ($index1 == 10) break;  // Only print 15 images
$image_name1 = basename($image1);
echo "<img src='/images/photos/{$image_name1}' class='image".$class++."' /> <img src='/images/photos1/{$image_name2}' class='image".$class++."' />";
}

我是否朝错误的方向去做?

谢谢泰德