用PHP从目录生成随机图片

3

我需要从一个文件夹中生成随机图片。我知道这很简单,比如:

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

但我仍然被这段代码卡住了。请有人帮忙改进这段代码吗?或者有其他的想法吗?
谢谢。

你在展示图片后需要保留图片路径吗?你可以在使用完一张图片后,从 $images 数组中移除它们。 - Nate
你的意思是一次性展示所有图片,还是只展示一张图片,在页面刷新后更换为另一张? - xdazz
4个回答

3

一种解决方案可能是这样的:

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

这将确保您随机使用每个图像仅一次。

2

array_rand的替代方案之一是shuffle:

$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()函数,这样在第二次迭代时就可以发现任何新的图片。

P.S. 我假设您了解,默认情况下,PHP是无状态的。如果这个代码旨在为每个用户在访问页面时提供不同的图像(例如轮播广告),那么代码几乎相同,只需将$images数组移动到$_SESSION中即可。


@user3466544 感谢您提供的建议性编辑。(它被拒绝了,因为您在源代码中添加了注释来解释您所做的更改:下次只需添加分号,并使用编辑注释字段来解释任何内容即可。) - Darren Cook

0

这是我的答案,看起来还不错。它从给定文件夹中的图像中随机生成一个图像:

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

0

这些代码帮助从文件夹中提取随机图像

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接