我想从文件夹中随机显示n个图像。目前我正在使用此脚本来显示图像
<?php
$dir = './images/gallery/';
foreach(glob($dir.'*.jpg') as $file) { ?>
<div class="item"><img src="<?php=$file;?>"></div>
<?php } ?>
我只想要10个(或n个)数字,这个图像太随意了。怎么做?
答案 0 :(得分:1)
shuffle()
方法将以随机顺序放置给定数组的元素:
<?php
$dir = './images/gallery/';
function displayImgs($dir, $n=10){
$files = glob($dir.'*.jpg');
shuffle($files);
$files = array_slice($files, 0, $n);
foreach($files as $file) { ?>
<div class="item"><img src="<?php=$file;?>"></div>
<?php }
} ?>
<强>用法:强> displayImgs(“/ dir / temp / path”,20);
答案 1 :(得分:1)
嗯,这可能是矫枉过正,但您也可以使用目录迭代器和一些随机性来实现这一目标。我使用了来自this answer的随机数生成函数的修改版本。
确保您为该函数提供的路径相对于脚本所在的目录,在开头使用斜杠。如果您从文件层次结构中的不同位置调用此脚本,__DIR__
常量将不会更改。
<?php
function randomImages($path,$n) {
$dir = new DirectoryIterator(__DIR__. $path);
// we need to know how many images we can range on
// but we do not want the two special files . and ..
$count = iterator_count($dir) - 2;
// slightly modified function to create an array containing n random position
// within our range
$positionsArray = UniqueRandomNumbersWithinRange(0,$count-1,$n);
$i = 0;
foreach ($dir as $file) {
// those super files seldom make good images
if ($file->getFilename() === '.' || $file->getFilename() === '..') continue;
if (isset($positionsArray[$i])) echo '<div class="item"><img src="'.$file->getPathname().'"></div>';
$i++;
// change the count after the check of the filename,
// because otherwise you might overflow
}
}
function UniqueRandomNumbersWithinRange($min, $max, $quantity) {
$numbers = range($min, $max);
shuffle($numbers);
return array_flip(array_slice($numbers, 0, $quantity));
}
答案 2 :(得分:0)
使用名为rand()
的内置随机函数:
<?php
$dir = './images/gallery/';
for($i=0;$i<=10;$i++) {
echo '<div class="item"><img src="'.$dir.rand(1,10).'.jpg"></div>';
}
?>
答案 3 :(得分:0)
让我们先创建一个数组并将一些随机数推入其中。并且按照您的要求$n
为10
。
$n = 10;
$arr = array();
for($i = 1; $i <= $n; $i++){
/* Where $n is the limit */
$rand = rand($n);
array_push($arr, $rand);
}
所以现在我们有一个包含随机数字的数组,现在我们必须通过迭代数组来回显图像:
foreach($arr as $image){
$intToStr = (string) $image;
foreach(glob($dir. $intToStr . '.jpg') as $file){
echo "<div class='item'>$file</div>";
}
}
这会反映你的图像。