1

我通过 foreach 循环打印 img html 元素。

图像存储在 db 中,所以如果它们是 40 foreach 将打印 40 img

现在我需要,如果它们在 db 中有 40 个并且我需要打印 100 个 img 元素,重复循环直到它们达到 100 个,是否可以这样做?

编辑:

明确地说,我从 db 中检索了 40 个 img,我需要打印“100 OF THEM”(如果它们小于 100,则重复它们)......希望很清楚:P

4

4 回答 4

6

您可以使用迭代器

$images = new LimitIterator(
    new InfiniteIterator(
        new ArrayIterator($imgArray)
    ), 
    0, 100
);

foreach ($images as $image) {
    // print images
}

ArrayIterator使您$imgArray可以被其他迭代器迭代。将InfiniteIterator在包装结束ArrayIterator时从头开始重新开始$imgArray。最后,LimitIterator将迭代限制为 100 个项目。

因此,当您迭代时$imagesforeach将遍历图像数组中的元素,一遍又一遍地重复它们,直到打印了 100 个元素,例如这将输出图像 1-40,然后再输出 1-40,最后输出 1-20,因为 40+ 40+20=100。

演示:http ://codepad.org/YeDgpsVc

于 2012-09-23T09:25:30.770 回答
4

重复 100 次并在索引上使用模运算符:

$images = function_to_fetch_images();

for($i=0, $count = count($images); $i<100; $i++) {
  echo $images[$i % $count];
}
于 2012-09-23T09:18:11.600 回答
0

我不太确定我是否理解这个问题,但我猜你想显示 100 张图像,但如果少于 100 张,则重复一些图像。如果是这样,你可以使用一个for循环遍历所有图像,然后当你在最后一张图像,并且还没有输出 100 张图像时,回到第一个图像。

for ($i = 0, $j = count($images); $i < 100; $i++)
{
    echo $images[$i % $j];
}
于 2012-09-23T09:16:17.137 回答
0

为此,您将需要一个嵌套循环。我假设您的意思是您希望重复图像集中的元素,直到屏幕上出现 100 张图像,即使这意味着某些图像被复制。

for ($i = 0; $i < 100;) {
    foreach($imageSet as $image) {
        echo $image;
        $i++;
        if ($i < 100) break;
    }
}
于 2012-09-23T09:16:24.477 回答