Foreach循环项目组必须最多添加3个

时间:2012-08-01 08:52:03

标签: php loops foreach

我正在编写一个PHP foreach循环。我使用以下代码来确保只有3个项目被分组到.slide div容器中。

<?php 
$count = 0;
foreach ($listing as $item):?>
<div class='slide>

  <div class='item'>Item</div>

<?php if ($count++ % 3 == 1 ): ?>
</div>
<div class="slide">
<?php endif; ?>

<?php endforeach ?>

我需要每组总共有3个项目。从数组开头添加项目以填充剩余项目的最佳方法是什么?

修改

我需要的标记示例是:

<div class='slide'>
  <div class='item'>Item 1</div>
  <div class='item'>Item 2</div>
  <div class='item'>Item 3</div>
</div>
<div class='slide'>
  <div class='item'>Item 4</div>
  <div class='item'>Item 1</div>
  <div class='item'>Item 2</div>
</div>

因此,如果每个.slide没有3个项目,则数组会再次启动以填充它。

2 个答案:

答案 0 :(得分:3)

最近需要使用Bootstrap执行此操作,每3列包裹一行,并且无法找到一个好的工作答案,所以这是我提出的解决方案。希望它有所帮助。

<?php
$count = 0;
foreach ($listing as $item) {
  if ($count % 3 == 0) {
    echo "<div class='slide'>";
  }
  $count++;
?>
<div class='item'>Item</div>
<?php
  if ($count % 3 == 0) {
    echo "</div>";
  }
}
?>

这些链接将有助于解释操作员,以便您了解正在发生的事情:

PHP Arithmetic Operators(%=模数)

Incrementing/Decrementing Operators(++ =后增量)

答案 1 :(得分:1)

一个简单的解决方案是在循环之前将1或2个项目(如果需要)附加到$listing变量。

if (count($listing)%3!=0) {
    //Append 1 or 2 items from start of array if needed
    $listing = array_merge($listing, array_slice($listing, 0, 3-count($listing)%3));
}

array_slice调用返回一个包含03 - (size of array) mod 3(1或2)项的数组。 array_merge函数会将这些1或2项添加到原始$listing数组中。完整的代码(带有一些其他的小改进/修复)如下:

<?php 
    $count = 0;
    $listing = array(1, 2, 3, 4, 5, 6, 7);
    if (count($listing)%3!=0) {
        //Append 1 or 2 items from start of array if needed
        $listing = array_merge($listing, array_slice($listing, 0, 3-count($listing)%3));
    }
    ?><div class='slide'> <?php
    foreach ($listing as $item):
        if (($count>0) and ($count%3==0)):
            ?></div><div class="slide"><?php
        endif; 
        ?><div class='item'>Item <?=$item?></div><?php
        $count++;
    endforeach;
    ?></div><?php
?>

根据您的数据,您可能需要为原始$listing包含0或1项的情况添加特殊检查。此外,最好不要修改原始数组,而是使用副本将项目附加到foreach循环中并在foreach循环中使用。