【问题标题】:php generate random image from a directoryphp从目录生成随机图像
【发布时间】:2012-08-06 05:53:10
【问题描述】:

我必须从目录生成随机图像。我知道哪个很简单,

   $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 数组中删除。
  • 你的意思是显示一次所有的图片,还是只显示一张图片,刷新页面后换另一张?

标签: php random directory


【解决方案1】:

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

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

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

【讨论】:

    【解决方案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() 以便在第二次迭代中发现任何新图像。)

    附:我假设你明白,默认情况下,PHP 是无状态的。如果这应该在每个用户每次访问页面时为他们提供不同的图像(例如旋转横幅广告),那么代码几乎相同,但将 $images 数组移动到 $_SESSION。

    【讨论】:

    • @user3466544 感谢您提出的编辑建议。 (它被拒绝了,因为您在源代码中添加了 cmets 来解释您所做的更改:下次只需添加分号,并使用编辑注释字段来解释任何内容。)
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-09
        • 1970-01-01
        • 2018-03-08
        • 2012-09-21
        • 1970-01-01
        • 2010-10-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多