在一个循环中,我想在li
中包装前5个项目,然后在li
中包含每6个项目。我正在尝试使用代码,但它无法正常工作,它包含了li
中的前5个项目,之后它只包装了li中的每六个项目,但是没有li的第7个 - 第12个项目。
$i = 0;
while ($i < 19){
$i++;
if($i == 1 ){ echo '<li>'; }
if (($i > 5) AND ( $i % 6 == 0)){echo "<li>";}
echo "<div>item " . $i . "</div>";
if( $i == 5 ){ echo '</li>'; }
if(($i > 5) AND ( $i % 6 == 0)) { echo "</li>"; }
}
if ($i < 5 ) { echo "</li>"; }
if (($i > 5) AND ($i % 6 != 0)) { echo "</li>"; }
答案 0 :(得分:2)
这里有更简洁易读的解决方案。
$i = 0;
$group = 0;
$group_by = 5;
while ($i < 19){
$i++;
if ($group == 0) {//new group start
echo "<li>";
}
echo "<div>item " . $i . "</div>";
$group++;
if ($group == $group_by) {//end of group
echo "</li>\n";
$group = 0;
$group_by = 6;
}
}
if ($group != 0) { echo "</li>"; }//end group if it was not closed
答案 1 :(得分:1)
这是因为您的条件为$i % 6 == 0
,表示“每个第六项目”,而不是6项。
要包含6个连续元素,即从7到12,您应该将条件重写为$i <= 12
,以便您的代码变为:
$i = 0;
for (; $i < 19; $i++) {
if($i == 1 ){ echo '<li>'; }
if (($i > 5) AND ( $i <= 12)){echo "<li>";}
echo "<div>item " . $i . "</div>";
if( $i == 5 ){ echo '</li>'; }
if(($i > 5) AND ( $i <= 12)) { echo "</li>"; }
}
if ($i < 5 ) { echo "</li>"; }
if (($i > 5) AND ($i <= 12)) { echo "</li>"; }
答案 2 :(得分:1)
试试这个解决方案:
for ($i = 1; $i < 20; $i++) {
echo ($i === 1 || $i % 6 === 0) ? "<li>" : null,
"<div>item {$i}</div>",
($i % 6 === 5) ? "</li>" : null;
}
if ($i % 6 !== 0) echo "</li>";
我试图让它尽可能简单。
<强> Code Example 强>