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

但我仍然坚持使用这段代码。有人请帮助改进此代码吗?或任何其他想法?

谢谢。

4

4 回答 4

3

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

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

这将保证您以随机顺序仅使用每个图像一次。

于 2012-08-09T02:51:23.467 回答
2

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.

于 2012-08-09T02:49:49.567 回答
0

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

       <?php 
            $files = glob('photos/*'); 
               natcasesort($files);      // Display images  
            foreach($files as $file) {     
               echo '<img src="' . $file . '"/>';
            }  
        ?>
于 2013-01-18T14:00:11.963 回答
0

这是我的答案,它似乎工作正常。它从给定文件夹中的图像随机生成一张图像:

<?php 
$result = glob('images/*'); 
shuffle($result);
foreach($result as $result) {     
   break;     
}  
?>
<img src="<?php echo "$result"; ?>" />
于 2015-12-09T06:29:22.350 回答