【问题标题】:Display random images from folder with PHP without duplicates使用 PHP 显示文件夹中的随机图像而不重复
【发布时间】:2018-04-01 09:58:20
【问题描述】:

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

我发现了这个问题: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 的目录并自动生成数组

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

$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}' />";
}

也许我错过了什么?

任何指针都会很棒。

非常感谢

【问题讨论】:

  • 您确定/public/directory/{$image_name} 是正确的路径吗?
  • 您好,Arkadi,感谢您的回复。我确实在我的网站上使用了我自己的图像路径,我的问题中的代码只是取自引用的帖子。
  • @FredBentley 您能否提供有关您的设置的更多详细信息?你在哪里上传目录?可能是 lsdir 显示图像名称和路径?
  • foreach 之前写上print_r($all_images); die(); 并检查打印的内容
  • 我更新了上面的第二个代码块,以显示我的图像在 /images/photos/ 中目前有 70 张图像,例如 mywebsite.com/images/photos/55v4423097ww6.jpg 就是其中一张。我尝试了你的建议 Arkadi,但它似乎杀死了脚本。可能与 $images = array();代码中不再引用?代码后面的 $image 也应该是 $images 吗?

标签: php image random duplicates


【解决方案1】:

试试这个

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

【讨论】:

    【解决方案2】:

    感谢 Aron,但我设法通过更改来解决它:

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

    为了让事情变得更复杂,我刚刚意识到我需要显示第一个文件夹中的 1 张图像,然后显示第二个文件夹中的另一张图像,然后重复大约 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++."' />";
    }
    

    我这样做是不是走错了方向?

    谢谢泰德

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-01
      • 2017-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多