0

所以我使用下面的代码从一个文件夹中提取一个随机文件,我想这样做,所以永远没有机会再次提取当前文件(即:连续两次看到相同的图像/文档) .

我该怎么办?提前致谢!

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

4 回答 4

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];
}
于 2012-06-30T21:31:25.260 回答
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];
    }
}
于 2012-06-30T21:35:33.660 回答
0

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

in_array()会帮助你的。array_push()将有助于填充“使用的文件”数组。

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

于 2012-06-30T21:30:44.683 回答
0

如果您想以随机顺序呈现一组固定的文件,则将所有文件名读入一个数组,打乱该数组,然后从头到尾使用该数组。

于 2012-06-30T21:41:14.460 回答