Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Foreach循环项目组的总和必须为3_Php_Loops_Foreach - Fatal编程技术网

Php Foreach循环项目组的总和必须为3

Php Foreach循环项目组的总和必须为3,php,loops,foreach,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="s

我正在编写一个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 ?>


一个简单的解决方案是在循环之前向
$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\u slice
调用返回一个数组,其中包含从
0
3-(数组大小)mod 3
(1或2)的项。然后,
array\u 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循环中并在其中使用。

一个简单的解决方案是在循环之前向
$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\u slice
调用返回一个数组,其中包含从
0
3-(数组大小)mod 3
(1或2)的项。然后,
array\u 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循环中并在其中使用。

最近需要使用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>";
  }
}
?>

这些链接将有助于解释操作员,以便您了解发生了什么:

(=模数)


(++=Post increment)

最近需要使用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>";
  }
}
?>

这些链接将有助于解释操作员,以便您了解发生了什么:

(=模数)


(++=Post increment)

您到底想要什么?像这样?你到底想要什么?像这样?模和增量运算符FTW!模和增量运算符FTW!