在PHP中随机选择50个文件夹中的50个文件夹,然后在每个文件夹中枚举(thumb)文件夹以获取缩略图

时间:2013-08-23 12:02:00

标签: php arrays random

我在php中为自己写了一个图片库。

我使用'foreach'循环浏览图库文件夹并在主页面上显示缩略图。

我只想在主页上返回20个画廊(缩略图) - 但我希望这些20个是完全随机的。

所以 - 我知道我需要首先将我的图库文件夹名称读入数组,然后从该数组中随机化20个文件夹。我该怎么办呢?

我的部分代码目前看起来像这样:

$i = 0;
foreach(glob($galdir.'*', GLOB_ONLYDIR) as $dir) {
     $thumbdir = ($dir . "/thumbs/");

    echo "<div class=\"picture titleleft\">\n";
    // echo "<div class=\"picture titleleft\" style=\"width:175px;\">\n";
    echo '<a href="showgal.php?gallery='. $dir . '">
    <img src="'.random_pic($thumbdir).'" alt="mypicturedlife gallery image" height="112px"></a>' . "\n";
    $galname = str_replace(array("galleries/"), "", $dir);
    $galleryname = str_replace(array("_"), " ", $galname);
    echo "$galleryname\n";
    echo "</div><!-- close picture titleleft -->\n";
    if (++$i == 20) break;
}

你会看到我在循环之前有$ i = 0,然后在循环内的第20个国家休息。

这很好 - 但当然只返回前20个画廊而不是随机。

感谢。

3 个答案:

答案 0 :(得分:1)

就像你说的那样,把所有文件夹放到一个数组中:

$dirs = glob($galdir . '*', GLOB_ONLYDIR);

然后使用shuffle()随机化数组中元素的顺序:

shuffle($dirs);

然后使用array_slice()选择/提取该数组的前20个:

$dirs = array_slice($dirs, 0, 20);

然后将这些目录/画廊输出到您的主页上,就像您使用foreach一样:

foreach($dirs as $dir) {
    echo 
        '<div class="picture titleleft">' .
            '<a href="showgal.php?gallery=' . $dir . '">
                <img src="' . random_pic($dir . '/thumbs/') . '" alt="..." />' .
            '</a>' .
            str_replace(array("galleries/", "_"), array("", " "), $dir) .
        '</div>';
}

答案 1 :(得分:0)

首先,将所有图库保存在数组中。

$storage = glob($galdir . '*', GLOB_ONLYDIR);

现在,将阵列洗牌。

shuffle($storage);

现在你有一个数组,其中所有的画廊都是随机排序的。再次穿过它们。

for($i = 0; $i < 20; $i++) { //Only 20
    echo $storage[$i]; //Directory name. Add your HTML stuff here
}

答案 2 :(得分:0)

这个:http://php.net/manual/en/function.array-rand.php似乎是你需要的东西