Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 文件夹中的随机文件(无重复)_Php_Random_Directory - Fatal编程技术网

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];
    }
}