【问题标题】:How to make a nested For Loop split output across two DIVs?如何在两个 DIV 之间进行嵌套的 For Loop 拆分输出?
【发布时间】:2019-12-09 09:06:39
【问题描述】:

使用 Wordpress 和 PHP,我想编写几个 for 循环,这将允许我使用引导程序输出 html,以从后端的画廊创建图像网格,而不是将所有图像单独编码到页面中. 外部 for 循环工作并创建两个引导 div。内部循环中的 if 语句给我带来了问题。

我最后一次尝试让 if 语句在元素 4 处提前结束内循环,然后掉入将关闭第一个 div 的外循环。之后外部循环将再次开始,创建另一个 div,但我不知道如何在测试数组中的元素 5 处重新启动内部循环。

我需要什么才能使这个 for 循环停止在第 4 个 div 之后用内容填充第一个 div 并结束第一个 div,但会从第 5 个开始重新开始,开始第二个 div 并运行循环的其余部分?

现在这就是我所拥有的。我正在使用数值数组作为测试以使循环正常工作。

<?php $arr = array(1, 2, 3, 4, 5, 6, 7, 8);
    $length = count($arr);
?>      
        <div class="row w-100"> //Outer container div
            <?php for($i = 1; $i <= 2; $i++) //Outer loop
                {
            ?>
            <div class="row w-100"> //Inner output div
                <?php
                    for($j = 0; $j <= $length; $j++) //Inner loop
                    {
                        if($j == 4)
                        {
                            break;
                        }
                        else
                        {
                            echo $arr[$j];
                        }
                    }
                ?>
            </div>
            <?php
                } //End outer loop
            ?>
        </div>

当内部循环将内容输出到 div 中时,它看起来像这样:
第1234章 第1234章

这就是我想要的样子:
第1234章 第5678章

在一次尝试中,我使用了 foreach 循环作为内部循环,但我了解到您不能停止 foreach 循环并在索引处重新启动它,因此我放弃了它,改为使用两个 for 循环。

我也意识到 break 语句不是最好的解决方案。它只是在那里显示我目前的进步。我尝试了一个 continue 语句,但我的结果打印出了两个 div 的整个数组,同时跳过了数字 5。

编辑: 我刚刚意识到我没有在代码 sn-p 中指出我的 div 的含义。固定。

【问题讨论】:

  • 是否要连续创建 4 个列,其余 4 个列在第二行?
  • 是的,这就是我最终想要达到的结果。
  • 我已经发布了我的答案,请检查,如果有任何问题请告诉我

标签: php wordpress for-loop if-statement


【解决方案1】:

我建议不要嵌套 - 更简单的代码:

<?php 
$arr = array(1, 2, 3, 4, 5, 6, 7, 8, 9);

$count = sizeof($arr);
$cols = 4;

for($i=0; $i< $count; $i++) {
  if ($i % $cols == 0) {echo 'open outer div';}
  echo 'inner div';     
  if (($i % $cols == $cols - 1) || ($i == $count - 1)) {
    //also supporting non complete "inner loop".
    echo 'close outer div';
  }
}

【讨论】:

    【解决方案2】:

    只需扩大$j的范围:

    <?php $arr = array(1, 2, 3, 4, 5, 6, 7, 8);
        $length = count($arr);
        $j = 0;
    ?>      
            <div class="row w-100">
                <?php for($i = 1; $i <= 2; $i++) //Outer loop
                    {
                ?>
                <div class="row w-100">
                    <?php
                        while ($j <= $length) //Inner loop
                        {
                            if($j == 4)
                            {
                                break;
                            }
                            else
                            {
                                echo $arr[$j];
                            }
                            $j++;
                        }
                    ?>
                </div>
                <?php
                    } //End outer loop
                ?>
            </div>
    

    【讨论】:

      【解决方案3】:

      希望这能解决您的问题:)

      <?php
          $arr = array(1, 2, 3, 4, 5, 6, 7, 8);
          $length = count($arr);
          $n= 0;
          $l = 4;
      ?>      
              <div class="row w-100">
                  <?php for($i = 1; $i <= 2; $i++) //Outer loop
                      {
                  ?>
                  <div class="row w-100">
                      <?php
                          for($j = $n; $j <= $length; $j++) //Inner loop
                          {
                              if($j == ($l+ $n))
                              {   
                                  $n = $j;
                                  break;
                              }
                              else
                              {
                                  echo $arr[$j];
                              }
                          }
                      ?>
                  </div>
                  <?php
                      } //End outer loop
                  ?>
              </div>
      

      【讨论】:

        【解决方案4】:

        这个怎么样?简单直接。

         $arr = array(1, 2, 3, 4, 5, 6, 7, 8);
         $length = count($arr);
         $group = array();   
         $count = 0;
         $div = 4;
        
         foreach($arr as $i) {
             $group[] = $i;
             $count++;
        
             if($count % $div == 0){
                 echo "<div>".implode('',$group)."</div>";
                 $group = array();
                 $count = 0;
             }
         }
        

        【讨论】:

          【解决方案5】:

          你需要对你的IF条件做些小改动并定义一个新的变量$l = 0;

          for($j = l; $j

          if($j == ($l+$length/2)) // 因为这里我们提到了条件。对于前 4 次迭代,$l 的值将为 0。

          $l = $j; // 一旦这个条件成立,$l 的值就变成了 $j(4)。

          <?php
              $arr = array(1, 2, 3, 4, 5, 6, 7, 8);
              $length = count($arr);
              $l=0;
          ?>      
                  <div class="row w-100">
                      <?php for($i = 1; $i <= 2; $i++) //Outer loop
                          {
                      ?>
                      <div class="row w-100">
                          <?php
                              for($j = l; $j <= $length; $j++) //Inner loop
                              {
                                  if($j == ($l+$length/2))
                                  {   
                                      $l = $j;
                                      break;
                                  }
                                  else
                                  {
                                      echo $arr[$j];
                                  }
                              }
                          ?>
                      </div>
                      <?php
                          } //End outer loop
                      ?>
                  </div>
          

          【讨论】:

            【解决方案6】:

            据我所知,您想连续显示 4 个列。如果你愿意,那么你不需要打破循环。您只需要更改引导类,请看如下:

            <?php
              $arr = array(1, 2, 3, 4, 5, 6, 7, 8);
              $length = count($arr);
            ?> 
            <div class="row">
              <?php for($i=0; $i <=$length; $i++){ ?>
                <div class="col col-md-3"><?php echo $arr[$i]; ?></div>   
              <?php } ?>  
            </div>

            希望对你有帮助。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-10-18
              • 2016-05-21
              • 1970-01-01
              • 2022-06-28
              • 2013-08-14
              相关资源
              最近更新 更多