【问题标题】:Run Inner Loop after each 3rd iteration of outer loop在外循环的每 3 次迭代后运行内循环
【发布时间】:2017-10-04 03:48:20
【问题描述】:

我有 2 个循环内循环和外循环。

当外循环达到第三次迭代时,内循环应该运行。我喜欢这样。

 <?php 
       foreach($this->posts as $post){ 
 ?>
           <div id="post">
           </div>
          <?php  
                 foreach($this->domain_ads as $ads) { 
                      if($i%3==0){ 
           ?>
                           <div id="ads">
                           </div>
          <?php       }
                 } ?>
 <?php 
      }
 ?>

结果是这样的

问题:

问题是内部循环显示第三次迭代后的所有结果。但我只想显示内循环的一个结果,然后内循环的第二个结果应该在外循环的下 3 次迭代之后显示。

我该如何解决这个问题?

【问题讨论】:

  • 使用简单的$this-&gt;domain_ads[0] insted of foreach?

标签: php loops iteration


【解决方案1】:

简单的解决方案:

<?php
$i = 0;
// counter for ads
$ad_counter = 0;
foreach($this->posts as $post) {?>
<div id="post"></div>
<?php
    $i++;
    // check if it is time to show ad 
    // and if you have ad with `$ad_counter`
    if ($i % 3 == 0 && isset($this->domain_ads[$ad_counter])) {?>
        <div id="ads"><?php echo $this->domain_ads[$ad_counter]['name'];?>></div>
<?php   // increase `$ad_counter` so as to move to next ad
        $ad_counter++;
    }
}

【讨论】:

    【解决方案2】:
    $i = 1;
    for($a = 0; $a<=10; $a++){ //your first foreach loop
        echo "abc<br />"; //you div
        if($i%3==0){ //check condition
            for($b=0; $b<2;$b++){ //your inner foreach loop
                echo "xyz<br />"; //inner loop content
            } //end inner loop
        } //end if condition
        $i++;
    } //end outer foreach
    

    希望这会有所帮助 Demo

    【讨论】: