我正在编写一个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个项目,则数组会再次启动以填充它。
答案 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
调用返回一个包含0
到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循环中并在foreach循环中使用。