PHP模数和不等分的项

时间:2016-09-16 15:03:08

标签: php

我设置了一个简单的foreach循环。我已将其设置为有一个计数$count,并且每四个项目都会插入一个元素,其中包含有关这四个项目的信息。

<?php if ($count%4 == 0) : ?>
    <div></div>
<?php endif; ?>

但如果项目总数不等于4则会怎样?如果有17件商品怎么办?有没有办法检查遗留的内容?

感谢。

2 个答案:

答案 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;

希望有所帮助。