提问者:小点点

PHP nth迭代[重复]


因此,我试图使用PHP生成一些内容,其条件是第n个循环需要打开或关闭div元素。所以我的目标是在页面上显示8个元素,在第9个元素上,如果有更多的图像,我想关闭第8个元素的div,并为第9个元素打开一个新的div。这是我的代码。

$images; // object
$i = 1;

echo '<div class="outer-container">';

while ( $images->have_images() ) {

     if ( $i === 1 ) {
          echo '<div class="inner-container">';
     }

     echo 'content here';

     if ( $i === 8 || $images->total === $images->current + 1 ) {
          echo '</div><!--.inner-container-->';
     }

     $i++;
}

echo '</div><!--.outer-container-->';

最终结果应该是这样的:

<div class="outer-container">

<div class="inner-container">
    content here
    content here
    content here
    content here
    content here
    content here
    content here
    content here
</div><!--.inner-container-->

<div class="inner-container">
    content here
    content here
    content here
</div><!--.inner-container-->

</div><!--.outer-container-->

我四处搜索,得出一个结论,我可能必须使用模数,但我不确定如何将其纳入我的代码中。

谢谢你的关注。


共3个答案

匿名用户

if ( $i % 8 == 0) {
      echo '</div><!--.container--><div class="container">';
}

Mod操作符返回余数。您可以简单地声明$i%8$i%8==0$i%8===0如john所述

但是您还需要打开条件中的下一个div,这取决于您如何构建它。一个例子:

<div class="outer-container">
    <div class="inner-container">
        <?php
        $images; // object
        $i = 1;

        while ( $images->have_images() ) {

             echo 'content here';
             //print_r($i % 8);
             if ( $i % 8 == 0 && $images->total > 8) {
                  echo '</div><!--.inner-container--><div class="inner-container">';
             }

             $i++;
        }
        ?>
    </div>
</div>

添加条件,以防你的图像总数恰好是8,它不会创建一个流氓空div。

我试图理解你的评论。你是说你有一个外部容器,然后是一个内部容器,在这个内部容器中,你想要你在问题中定义的循环,其中每个8组包含在一个容器div中?

我在循环中添加了一个print r,您可以取消注释以验证$I是否正在执行您希望它执行的操作。根据这段代码和$i从1开始的事实,您不应该过早地经历结束div条件。

匿名用户

模数确实是你要找的:

if ( $i % 8 === 0 ) {
    echo '</div><!--.container-->';
}

匿名用户

你忘记开新部门了

修改以下代码:

if ( $i === 8 || $images->total === $images->current + 1 ) {
    echo '</div><!--.container-->';
    echo '<div class="container">'; //ADD THIS LINE!!!
}

当你退出添加结束