0

したがって、次のコードを使用してフォルダーからランダムなファイルを取得していますが、現在のファイルを再度取得する可能性がないようにしたいと考えています (つまり、同じ画像/ドキュメントを 2 回続けて表示する)。 .

これについてどうすればいいですか?前もって感謝します!

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

4 に答える 4

1

最後に表示されたファイル名を 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

固定されたファイルのセットをランダムな順序で表示する場合は、すべてのファイル名を配列に読み込み、配列をシャッフルしてから、配列を最初から最後まで使用します。

于 2012-06-30T21:41:14.460 に答える
0

本質的に:配列で使用されるすべてのファイルの名前を保存します。新しい名前を取得するたびに、それが配列に既に存在するかどうかを確認してください。

in_array()そのお手伝いをします。array_push()「使用済みファイル」配列を埋めるのに役立ちます。

配列を静的なものにして、関数を呼び出すたびにリストを使用できるようにすることができます (グローバル変数を使用する代わりに)。

于 2012-06-30T21:30:44.683 に答える