所以我正在使用以下代码从文件夹中提取一个随机文件,我想这样做,以便再也无法提取当前文件(即:两次查看相同的图像/文档)一排)。
我该怎么做?提前谢谢!
function random_file($dir = 'destinations')
{
$files = glob($dir . '/*.*');
$file = array_rand($files);
return $files[$file];
}
答案 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)
如果要以随机顺序呈现一组固定的文件, 然后将所有文件名读入一个数组,随机播放该数组 然后从开始到结束使用数组。