文件夹中的随机文件(无重复)

时间:2012-06-30 21:28:29

标签: php random directory

所以我正在使用以下代码从文件夹中提取一个随机文件,我想这样做,以便再也无法提取当前文件(即:两次查看相同的图像/文档)一排)。

我该怎么做?提前谢谢!

function random_file($dir = 'destinations')
{
    $files = glob($dir . '/*.*');
    $file = array_rand($files);
    return $files[$file];
}

4 个答案:

答案 0 :(得分:1)

将最后查看的文件名存储在Cookie或会话中。

以下是使用cookie的方法:

function random_file($dir = 'destinations') {
    $files = glob($dir . '/*.*');
    if (!$files) return false;
    $files = array_diff($files, array(@$_COOKIE['last_file']));
    $file = array_rand($files);
    setcookie('last_file', $files[$file]);
    return $files[$file];
}

答案 1 :(得分:1)

$picker = new FilePicker();
$picker->randomFile();
$picker->randomFile(); // never the same as the previous

-

class FilePicker
{
    private $lastFile;

    public function randomFile($dir = 'destinations')
    {
        $files = glob($dir . '/*.*');

        do {
            $file = array_rand($files);
        } while ($this->lastFile == $file);

        $this->lastFile = $file;

        return $files[$file];
    }
}

答案 2 :(得分:0)

基本上:存储数组中使用的每个文件的名称;每次拉新名称时,请检查它是否已存在于数组中。

in_array()会帮助您。 array_push()将帮助填充“used files”数组。

您可以将数组设为static,以便在调用函数时使列表可用(而不是使用全局变量)。

答案 3 :(得分:0)

如果要以随机顺序呈现一组固定的文件, 然后将所有文件名读入一个数组,随机播放该数组 然后从开始到结束使用数组。