通过PHP将目录中的照片随机化

通过PHP将目录中的照片随机化,php,random,photo,Php,Random,Photo,我有下面的代码,它可以在每次单击刷新按钮时将我的“照片”文件夹中的照片随机化。我知道这可能不是最有效的编码方式,但就我而言,它是有效的。我正在寻找帮助,关于我的PHP代码,这将使照片更随机。我目前有200多张图片在文件夹中,经常会得到比我想要的更多的重复图片。我可以对其进行哪些更改?(注:忽略我正在使用的AJAX/JavaScript) 图片! 正文{背景色:D3DFDE;} $(函数(){ $(“#我的按钮”)。单击(函数(){ $(“#main”).load(“index.php”);

我有下面的代码,它可以在每次单击刷新按钮时将我的“照片”文件夹中的照片随机化。我知道这可能不是最有效的编码方式,但就我而言,它是有效的。我正在寻找帮助,关于我的PHP代码,这将使照片更随机。我目前有200多张图片在文件夹中,经常会得到比我想要的更多的重复图片。我可以对其进行哪些更改?(注:忽略我正在使用的AJAX/JavaScript)


图片!
正文{背景色:D3DFDE;}

$(函数(){ $(“#我的按钮”)。单击(函数(){ $(“#main”).load(“index.php”); }); }); 创作人:马特和乔
您可以执行以下操作:

  • 通过不反复读取目录来优化代码。您可以通过读取一次目录(然后将条目作为数组存储在APC缓存中)来实现这一点。设置此APC密钥的超时,以便偶尔中断缓存
  • 调用'mt_rand'函数,最小值为'0',最大值为'count(array)-1',然后访问该索引
  • 从目录中读取的通用代码如下(需要修改以满足您的需要):


    提供变量$dirpath的目录完整路径

    $image_source_array=scandir($dirpath);
    sort($image_source_array);
    
    使用
    mt\u rand
    函数,最小值为
    0
    最大值为
    count($image\u source\u array)-1
    ,并从数组访问该索引以获取图像名称

    然后使用$dirpath/image名称访问图像,每次都会得到随机图像

    创建这样的函数,这将是最短的方法

    function randomimages() {
        $dirname = isset($_REQUEST['dir']) ? $_REQUEST['dir'] : './photos/';
        $image_source_array = scandir($dirname);
        sort($image_source_array);
        $image_count = count($image_source_array) - 1;
        $rand_index = mt_rand(3, $image_count);
        //Starting with 3 because scandir returns directory also in the 2 indexes like '.' and '..'
        $rand_image_path = $dirname . $image_source_array[$rand_index];
        return $rand_image_path;
    }
    

    为了简单性和可重用性,您可能希望与以下一起使用:

    使用:

    $path = isset($_REQUEST['dir']) ? $_REQUEST['dir'] : './photos/';
    $num_images = isset($_REQUEST['num']) ? $_REQUEST['num'] : 1;
    
    print implode('<br />', randomimages($path, $num_images));
    
    $path=isset($\u请求['dir'])$_请求['dir']:'/照片/';
    $num_images=isset($_请求['num'])$_请求['num']:1;
    打印内爆(“
    ”,随机图像($path,$num_图像));
    您应该忽略“.”目录是“…”也忽略了!我正在检查任何以“.”开头的条目:)是的,对不起,现在是早上…;)接受答案我相信它会用最少的代码解决你的问题。你可以在我下面的答案中找到最短的方法。如果你发现下面的答案有用,你可以“接受”它。
    function randomimages() {
        $dirname = isset($_REQUEST['dir']) ? $_REQUEST['dir'] : './photos/';
        $image_source_array = scandir($dirname);
        sort($image_source_array);
        $image_count = count($image_source_array) - 1;
        $rand_index = mt_rand(3, $image_count);
        //Starting with 3 because scandir returns directory also in the 2 indexes like '.' and '..'
        $rand_image_path = $dirname . $image_source_array[$rand_index];
        return $rand_image_path;
    }
    
    function randomimages($path, $num_images)
    {
        $images = array();
    
        foreach (new RegexIterator(new DirectoryIterator($path),
                                   '#\.(jpe?g|gif|png|bmp)$#i') as $file) {
            $images[] = $file->getPathname();
        }
    
        shuffle($images);
    
        return array_slice($images, 0, $num_images);
    }
    
    $path = isset($_REQUEST['dir']) ? $_REQUEST['dir'] : './photos/';
    $num_images = isset($_REQUEST['num']) ? $_REQUEST['num'] : 1;
    
    print implode('<br />', randomimages($path, $num_images));