【问题标题】:PHP: wrapping each group of 3 elementsPHP:包装每组 3 个元素
【发布时间】:2018-02-11 22:43:06
【问题描述】:

我试图弄清楚如何编写一个循环来包装每组 3 个元素。但是,对于最后一次迭代,它应该包装剩下的任何东西(无论是一个、两个还是三个元素)

所以基本上这种模式:

div
do stuff
do stuff
do stuff
end-div
div
do stuff
do stuff
do stuff
end-div
div
do stuff
do stuff
do stuff
end-div
div
do stuff
end-div

这是我目前所处的位置:

<?php

  $counter = 0;

  for ($i = 1; $i <= 10; $i++) {

    if (($counter + 1) % 3 == 0) {
      echo 'div <br />';
    }
    echo 'do stuff <br />';
    if (($counter + 1) % 3 == 0) {
      echo 'end-div <br />';
    }

    $counter ++;
  }

?>

这给了我以下信息:

do stuff 
do stuff 
div 
do stuff 
end-div 
do stuff 
do stuff 
div 
do stuff 
end-div 
do stuff 
do stuff 
div 
do stuff 
end-div 
do stuff 

谁能看出我哪里出错了?

【问题讨论】:

    标签: php loops for-loop iteration modulus


    【解决方案1】:

    无需使用单独的$counter 变量,在for 循环本身中使用$i 变量。

    echo 'div <br />';
    for ($i = 0; $i < 10; $i++) {
        if($i != 0 && $i % 3 == 0)
            echo 'end-div <br /> div <br />';
        echo 'do stuff <br />';
    }
    echo 'end-div';
    

    【讨论】:

      【解决方案2】:

      也就是说,你需要在每组三项之前写div,在每组三项之后写end-div

      // $counter always tells the number of processed items
      $counter = 0;
      
      for ($i = 1; $i <= 10; $i++) {
          // before a group of three, $counter is a multiple of three
          if ($counter % 3 == 0) {
              echo 'div <br />';
          }
      
          // process the item then count it
          echo 'do stuff <br />';
          $counter ++;
      
          // after a group of three, $counter is a multiple of three
          if ($counter % 3 == 0) {
              echo 'end-div <br />';
          }
      }
      
      // close the last group if it is not complete
      if ($counter % 3 != 0) {
          echo 'end-div <br />';
      }
      

      查看online

      【讨论】:

      • 我不知道为什么我认为这个是错误的。为什么首先检查循环外的不完整组。其实我的意思是,检查$i % 3 = 0 是不够的,请因为我们可能总是有不完整的组
      • 随心所欲地想是你的权利。你可以写一个更好的解决方案。或者你可以检查一下this code is running 是否有效。
      【解决方案3】:

      这就是我解决问题的方法

      $total_items = 11;
      
      
      
      for( $i = 0; $i < $total_items; $i ++ ){
          // get the starting element
          // the starting element will have ($i + 1 ) % 3 = 1
          // all starting elements in the group will have a  modulus of 1 when divided by 3
      
      
          if( ( $i + 1 ) % 3 == 1  ){
              echo "div <br />";
          }
      
          echo "do stuff <br />";
      
          // the group will either end where ($i + 1 ) % 3 = 0
          // or at the end of the count 
          // if total items are 2 then it will end at 2
      
          if( ( $i + 1 ) % 3 == 0 || ( $i + 1 )  == $total_items ){
              echo "end-div <br /><br />";
          }
      
      }
       
      

      我使用 w3schools PHP 编译器运行我的代码,请看截图

      【讨论】:

        猜你喜欢
        • 2020-06-05
        • 1970-01-01
        • 2011-06-19
        • 1970-01-01
        • 1970-01-01
        • 2022-01-24
        • 1970-01-01
        • 2017-02-25
        • 1970-01-01
        相关资源
        最近更新 更多