新的行标记第一个数字和后面的每4个数字?

时间:2011-03-04 19:14:29

标签: php loops

我正试图在我的循环中第一次触发新的触发然后在4次计数后关闭然后在我的循环中打开一个新的我尝试用模数做这个但我不认为我这样做正确。

我试过的代码:

<?php for($i = 1; $i <= 12; $i++): ?>
    <?php if(! (i % 4)): ?>
        <div class="row">
    <?php endif; ?>

    <?php echo $i; ?>

    <?php if(! (i % 5)): ?>
        </div>
    <?php endif; ?>
<?php endfor; ?>

所以我的结果应该是:

<div class="row">
1 2 3 4
</div>
<div class="row">
5 6 7 8
</div>
<div class="row">
9 10 11 12
</div>

等...

3 个答案:

答案 0 :(得分:3)

最简单的解决方案是:

  • 开始输出之前的标记
  • 然后,循环你的项目
    • 显示项目
    • ,如果是$i % 4 == 3,则将放在之后,将放在标记之前
  • 最后,在标记后显示最终的


例如,像这部分代码:

$arr = range(1, 15);

echo "before";
for ($i=0 ; $i<count($arr) ; $i++) {
    echo " $i ";
    if ($i % 4 == 3) {
        echo 'after</br />';
        echo 'before';
    }
}
echo "after<br />";


会给出那种输出:

before 0 1 2 3 after
before 4 5 6 7 after
before 8 9 10 11 after
before 12 13 14 after


此解决方案的优点:您不必在循环内处理任何特定情况(循环的开始和结束)

答案 1 :(得分:2)

这应该有用,你对%的工作方式感到困惑,你只想使用% 4(因为你检查的是4的倍数),但是要比较不同的值。对于4的精确倍数,!($i % 4)将为真,这不是你想要的那样。

<?php for($i = 1; $i <= 12; $i++): 
    if(i % 4 == 1): ?>
        <div class="row">
    <?php endif;

    echo $i; ?>

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

答案 2 :(得分:0)

你会以不同的方式得到不匹配的东西。你想要的可能是:

<div class="row">
    <?php for($i = 1; $i <= 12; $i++): ?>
        <?php if(! (i % 4)): ?>
            </div>
            <div class="row">
        <?php endif; ?>

        <?php echo $i; ?>
    <?php endfor; ?>
</div>