我设置了一个简单的foreach循环。我已将其设置为有一个计数$count
,并且每四个项目都会插入一个元素,其中包含有关这四个项目的信息。
<?php if ($count%4 == 0) : ?>
<div></div>
<?php endif; ?>
但如果项目总数不等于4则会怎样?如果有17件商品怎么办?有没有办法检查遗留的内容?
感谢。
答案 0 :(得分:2)
如果你想在4个单独项目的循环中“分解”你的循环,那么也许你应该考虑分块你正在迭代的对象(数组或Traversable
):
$array = [1, 2, 3, 4]; // or $array = range(1, 10);
$chunked = array_chunk($array, 4); // 2D array, each of 4 elements, the last one might contain less elements though
foreach ($chunked as $arrOfFour) {
foreach ($arrOfFour as $value) {
//do stuff
}
echo 'processed: ' . implode(', ', $arrOfFour);
}
如果您正在处理数组以外的其他内容(以某种形式实现Traversable
接口的对象),您可以将其转换为数组以确保安全:
$array = iterator_to_array($traversableObject);
答案 1 :(得分:1)
所以这取决于你真正想要的是什么,你可以做一些简单的事情,把你的'Div'放在剩下的元素之后,如果它没有结束modulus 4
$items = ['One', 'Two', 'Three', 'Four', 'Five', 'Six', 'Seven'];
$itemsCount = count($items);
for ($i = 0; $i < $itemsCount; ++$i) {
echo $items[$i] . '<br/>';
if (($i+1) % 4 === 0) {
echo '---- Past four items explained here.<br/>';
}
}
if ($itemsCount % 4 !== 0) {
$x = $itemsCount % 4;
echo '--- Past '. $x .' items explained here.<br/>';
}
<强>输出:强>
One
Two
Three
Four
---- Past four items explained here.
Five
Six
Seven
--- Past 3 items explained here.
您还可以将数组分成较小的部分并进行嵌套循环。
$items = ['One', 'Two', 'Three', 'Four', 'Five', 'Six', 'Seven'];
$chunked = array_chunk($items, 4);
foreach ($chunked as $group) {
foreach ($group as $element) {
echo $element . '<br/>';
}
echo '---- Information about the last group here.<br/>';
}
<强>输出:强>
One
Two
Three
Four
---- Information about the last group here.
Five
Six
Seven
---- Information about the last group here.
如果您只是想知道在将内容拆分为4块之后剩下的数量,您可以执行以下操作:
$amountLeftOver = $arrayLength % 4;
希望有所帮助。