我必须从目录生成随机图像.我知道哪个很简单,
$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,GLOB_BRACE); $randomImage = $images[array_rand($images)]; if(!in_array($randomImage,$allimgs)) { $allimgs[]=$randomImage; <input type="image" src="<?=$randomImage;?>" alt="<?=$randomImage;?>" /> }
但我仍然坚持使用此代码.有人请帮忙改进这段代码吗?或任何其他想法?
谢谢.
对array_rand的一种替代方法是shuffle:
$dire="images/"; $images = glob($dire. '*.{jpg,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,GLOB_BRACE); shuffle($images); } $randomImage=array_pop($images);
(我故意重复了glob(),以便在第二次迭代时发现任何新图像.)
附:我假设你明白,默认情况下,PHP是无状态的.如果这应该在每次用户访问页面时给每个用户一个不同的图像(例如旋转横幅广告),那么代码几乎相同,但将$images数组移动到$_SESSION.