我正在尝试创建一个简单的foreach循环,该循环将对数组中的每16条记录进行分组。我还有另一个计数器($s),我需要在4点后重新播种。
这是我的代码
$a = array(
'book-1' => 'Book Title 1',
'book-2' => 'Book Title 2',
'book-3' => 'Book Title 3',
'book-4' => 'Book Title 4',
'book-5' => 'Book Title 5',
'book-6' => 'Book Title 6',
'book-7' => 'Book Title 7',
'book-8' => 'Book Title 8',
'book-9' => 'Book Title 9'
);
$i = 1;
$bookshelf = 1;
$s=0;
foreach ( $a as $k => $v )
{
if ($i == 9 || $i == 1)
{
echo '<div id="bookshelf-'.$bookshelf.'"></div>';
$bookshelf++;
}
if ($i%4 == 1)
{
echo '<div class="bookshelf-bottom">';
}
if ($i > 5)
{
$s=0;
}
$s++;
echo '<div class="book-frame-'.$s.'">'.$v.'</div>';
if ($i%4 == 0)
{
echo '</div>';
}
$i++;
}
if ($i%4 != 1) echo '</div>';
我想出口的是:
<div id="bookshelf-1" class="bookshelf-top"></div>
<div class="bookshelf-bottom">
<div class="book-frame-1">Book Title 1</div>
<div class="book-frame-2">Book Title 2</div>
<div class="book-frame-3">Book Title 3</div>
<div class="book-frame-4">Book Title 4</div>
</div>
<div class="bookshelf-bottom">
<div class="book-frame-1">Book Title 5</div>
<div class="book-frame-2">Book Title 6</div>
<div class="book-frame-3">Book Title 7</div>
<div class="book-frame-4">Book Title 8</div>
</div>
<div class="bookshelf-bottom">
<div class="book-frame-1">Book Title 9</div>
</div>
看看
<?php
$a = array(
'book-1' => 'Book Title 1',
'book-2' => 'Book Title 2',
'book-3' => 'Book Title 3',
'book-4' => 'Book Title 4',
'book-5' => 'Book Title 5',
'book-6' => 'Book Title 6',
'book-7' => 'Book Title 7',
'book-8' => 'Book Title 8',
'book-9' => 'Book Title 9'
);
$i = 1;
$bookshelf = 1;
$s=0;
foreach ( $a as $k => $v ) {
$s++;
if ($i == 9 || $i == 1) {
if($i == 1)
echo '<div id="bookshelf-'.$bookshelf.'" class="bookshelf-top"></div>';
else
echo '<div id="bookshelf-'.$bookshelf.'"></div>';
$bookshelf++;
}
if($s == 1)
echo '<div class="bookshelf-bottom">';
echo '<div class="book-frame-'.$s.'">'.$v.'</div>';
if($s == 4) {
echo '</div>';
$s = 0;
}
$i++;
}
?>
如果代码变得更加复杂,那么执行此操作的方式将非常难以理解。相反,我会选择这样的东西:
$a = array(
'book-1' => 'Book Title 1',
'book-2' => 'Book Title 2',
'book-3' => 'Book Title 3',
'book-4' => 'Book Title 4',
'book-5' => 'Book Title 5',
'book-6' => 'Book Title 6',
'book-7' => 'Book Title 7',
'book-8' => 'Book Title 8',
'book-9' => 'Book Title 9'
);
$i = 1;
$bookshelf = 1;
foreach ( array_chunk($a, 4) as $section )
{
echo '<div class="bookshelf-bottom">';
foreach( $section as $k => $v )
{
// Output this for the first and last item. I'd recommend taking this out of the foreach or restructuring this somehow to avoid the manual check.
if ($i == 9 || $i == 1)
{
echo '<div id="bookshelf-'.$bookshelf.'"></div>';
$bookshelf++;
}
$i++;
// Output this book.
echo '<div class="book-frame-'.$s.'">'.$v.'</div>';
}
echo '</div>';
}
这使用array_chunk来创建部分,然后对这些部分进行迭代以生成html。
编辑:如果你想包含一个完整的数组,其中包含更多的值和更多你需要生成的HTML,我很乐意修改这个foreach并解释它是如何工作的。