所以我使用下面的代码从一个文件夹中提取一个随机文件,我想这样做,所以永远没有机会再次提取当前文件(即:连续两次看到相同的图像/文档) .
我该怎么办?提前致谢!
function random_file($dir = 'destinations')
{
$files = glob($dir . '/*.*');
$file = array_rand($files);
return $files[$file];
}
将上次查看的文件名存储在 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];
}
$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];
}
}
本质上:将使用的每个文件的名称存储在一个数组中;每次拉取一个新名称时,检查它是否已经存在于数组中。
in_array()
会帮助你的。array_push()
将有助于填充“使用的文件”数组。
您可以使数组成为静态数组,以便在调用函数时(而不是使用全局变量)使列表可用。
如果您想以随机顺序呈现一组固定的文件,则将所有文件名读入一个数组,打乱该数组,然后从头到尾使用该数组。