Php 文件夹中的随机文件(无重复)
因此,我使用下面的代码从文件夹中随机抽取一个文件,我希望这样做,就不会有机会再次抽取当前文件(即:连续两次看到相同的图像/文档) 我该怎么办?提前谢谢Php 文件夹中的随机文件(无重复),php,random,directory,Php,Random,Directory,因此,我使用下面的代码从文件夹中随机抽取一个文件,我希望这样做,就不会有机会再次抽取当前文件(即:连续两次看到相同的图像/文档) 我该怎么办?提前谢谢 function random_file($dir = 'destinations') { $files = glob($dir . '/*.*'); $file = array_rand($files); return $files[$file]; } 本质上:存储数组中使用的每个文件的名称;每次提取新名称时,请检查该
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];
}
--
如果要以随机顺序显示一组固定的文件, 然后将所有文件名读取到一个数组中,洗牌该数组
然后从头到尾使用数组。您的问题不明确。。。你的意思是你不想连续看两次,还是你真的不想再看一次这个文件?你的意思是在一个请求中?还是应该在请求之间持久化?我宁愿避免将它们输入数组,因为如果有很多文件,这可能会变得太繁琐。嗯?用readdir读取文件名。但是不管怎样,既然你对“没有重复”很满意,那么只要记住最后一个文件就足够了。这似乎工作得很好!使用cookie有什么缺点吗?“headers ready sent”错误意味着您在调用setcookie()之前已经向浏览器打印了一些内容。您可以在开始打印内容之前调用random\u file(),也可以使用会话变量,如
$\u session['last\u file']
而不是setcookie()
和$\u COOKIE['last\u 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];
}
}