【问题标题】:PHP Foreach Skip First 6PHP Foreach 跳过前 6
【发布时间】:2016-11-01 17:43:55
【问题描述】:

我正在做一个 foreach,我想跳过前六个条目。到目前为止我有这个,它只是输出相同的,对于剩下的条目数,我应该把if($i2==6) continue; 放在其他地方吗?

   <?php
               $features = $property->get_features();
               if($lastRec2=count($features)){
                        echo '<div class="row">';
                        $i2=0;
                            foreach($features as $feature2) {
                                $i2++;
                                if($i2==6) continue;
                                if( ($i2 % 3== 1) && ($i2<$lastRec2) ) echo '</div><div class="row">';
                                    echo '<div class="col-md-4 p-b-15"><div class="fa-stack fa-1x checkmark-icon"><i class="fa fa-circle fa-stack-2x icon-background"></i><i class="fa fa-check fa-stack-1x icon-text"></i></div><div class="checkmark-inner">'.  $feature .'</div></div>';
                            }
                        echo '</div>';
                     }
                  ?>

【问题讨论】:

  • 你的意思是if($i2&lt;=6)?使用if($i2==6),您只需跳过一个条目。
  • 1 我看不到 $feature 在循环范围内的定义位置。 2. 为什么不使用 for 循环而不是 foreach 循环?

标签: php if-statement foreach


【解决方案1】:

只需切换到 for 循环。除非你需要迭代器。

$features = $property->get_features();
if($lastRec2 = count($features)){
  echo '<div class="row">';
  for ($i2 = 6; $i2 < count($features); ++$i2) {
    if( ($i2 % 3 == 1) && ($i2 < $lastRec2) ) echo '</div><div class="row">';
      echo '<div class="col-md-4 p-b-15"><div class="fa-stack fa-1x checkmark-icon"><i class="fa fa-circle fa-stack-2x icon-background"></i><i class="fa fa-check fa-stack-1x icon-text"></i></div><div class="checkmark-inner">'.  $features[$i2] .'</div></div>';
    }
    echo '</div>';
  }

【讨论】:

    【解决方案2】:

    应该是

    if($i2<=6)
        continue;
    

    continue; 将停止执行 foreach 的其余部分。
    您的代码只能运行一次,因为 $i2 将被设置为 6 一次。

    【讨论】:

      【解决方案3】:

      您可以使用array_chunkarray_slice 来完成您所追求的:

      http://php.net/manual/en/function.array-slice.php

      http://php.net/manual/en/function.array-chunk.php

      $features = $property->get_features();
      
      $skipped = array_slice($features, 6);
      
      $chunks = array_chunk($skipped, 3);
      
      foreach ($chunks as $chunk) {
          echo '<div class="row">';
      
          foreach ($chunk as $feature) {
              echo '<div class="col-md-4 p-b-15"><div class="fa-stack fa-1x checkmark-icon"><i class="fa fa-circle fa-stack-2x icon-background"></i><i class="fa fa-check fa-stack-1x icon-text"></i></div><div class="checkmark-inner">' . $feature . '</div></div>';
          }
      
          echo '</div>';
      }
      

      或者,如果您想使用 HTML 使您的代码更具可读性,您可以:

      foreach ($chunks as $chunk) : ?>
      
          <div class="row">
      
              <?php foreach ($chunk as $feature) : ?>
      
                  <div class="col-md-4 p-b-15">
      
                      <div class="fa-stack fa-1x checkmark-icon">
                          <i class="fa fa-circle fa-stack-2x icon-background"></i>
                          <i class="fa fa-check fa-stack-1x icon-text"></i>
                      </div>
      
                      <div class="checkmark-inner">
                          <?php echo $feature ?>
                      </div>
      
                  </div>
      
              <?php endforeach; ?>
      
          </div>
      
      <?php endforeach;
      

      仅供参考,我假设您的问题中的$feature2 是一个错字。如果没有让我知道哪个变量是什么意思,我会更新我的答案。

      希望这会有所帮助!

      【讨论】:

        【解决方案4】:

        首先,如果你想删除前六个条目,你的if是错误的,应该是:

        if($i2 <= 6) continue;
        

        如果数组中的键是连续的,你能这样做吗:

        foreach($features as $key => $feature2) {
            if($key < 6) continue;//0 to 5
        

        除非,你的代码应该可以正常工作

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-03-30
          • 1970-01-01
          • 1970-01-01
          • 2014-09-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多