foreachサイクルでimghtml要素を出力します。
画像はdbに保存されるため、40の場合、foreachは40imgを出力します
今、それらがdbで40であり、100 img要素を印刷する必要がある場合、それらが100になるまでサイクルを繰り返す必要がありますが、それは可能ですか?
編集:
明確にするために、私はdbから40 imgを取得し、「100 OF THEM」を印刷する必要があります(100未満の場合は繰り返します)...希望は明確です:P
イテレータを使用できます:
$images = new LimitIterator(
new InfiniteIterator(
new ArrayIterator($imgArray)
),
0, 100
);
foreach ($images as $image) {
// print images
}
は、他のイテレータによる反復可能にArrayIterator
なります。$imgArray
は、の終わりに達したときに、最初からInfiniteIterator
ラップされた最初からやり直します。最後に、は反復を100アイテムに制限します。ArrayIterator
$imgArray
LimitIterator
したがって、を繰り返すと$images
、foreach
100個の要素が印刷されるまで、画像配列内の要素を繰り返し処理します。たとえば、これにより、画像が1〜40、次に1〜40、最後に1〜20が出力されます。 40 + 20=100。
100回繰り返し、インデックスで剰余演算子を使用します。
$images = function_to_fetch_images();
for($i=0, $count = count($images); $i<100; $i++) {
echo $images[$i % $count];
}
質問を理解できるかどうかはわかりませんが、100枚の画像を表示したいと思いますが、100枚未満の場合は、一部の画像を繰り返します。その場合は、for
すべての画像を繰り返すループを使用できます。画像を表示し、最後の画像に到達し、100枚の画像が出力されていない場合は、最初の画像に戻ります。
for ($i = 0, $j = count($images); $i < 100; $i++)
{
echo $images[$i % $j];
}
このためにネストされたループが必要になります。一部の画像が重複している場合でも、画面に100枚の画像が表示されるまで、画像セットの要素を繰り返し処理することを意味していると思います。
for ($i = 0; $i < 100;) {
foreach($imageSet as $image) {
echo $image;
$i++;
if ($i < 100) break;
}
}