0

我在 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 个画廊而不是随机的。

谢谢。

4

3 回答 3

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>';
}
于 2013-08-23T12:12:06.820 回答
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
}
于 2013-08-23T12:06:58.453 回答
0

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

于 2013-08-23T12:07:19.400 回答