PHP显示目录中的随机n图像

时间:2015-10-21 05:08:31

标签: php html

我想从文件夹中随机显示n个图像。目前我正在使用此脚本来显示图像

<?php
$dir = './images/gallery/';
foreach(glob($dir.'*.jpg') as $file) { ?>
<div class="item"><img src="<?php=$file;?>"></div>
<?php } ?>

我只想要10个(或n个)数字,这个图像太随意了。怎么做?

4 个答案:

答案 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)

让我们先创建一个数组并将一些随机数推入其中。并且按照您的要求$n10

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

这会反映你的图像。