0

我正在编写一个 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 个项目,则数组会重新开始填充它。

4

2 回答 2

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 算术运算符(% = 模数)

递增/递减运算符(++ = 后递增)

于 2013-08-13T01:12:08.407 回答
1

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

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调用返回一个数组,其中包含来自0to 3 - (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 循环中使用。

于 2012-08-01T23:13:48.787 回答