0

在一个循环中,我想将前 5 个项目包装在 ali中,然后每 6 个项目包装在 a 中li。我正在尝试以下代码,但它无法正常工作,它将前 5 个项目包装在 ali中,之后它仅包装 li 中的每第六个项目,但第 7 - 12 个没有 li。

$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>"; }
4

3 回答 3

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

http://codepad.org/oxJloL03

于 2012-11-07T08:52:23.357 回答
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>";

我试图让它尽可能简单。

代码示例

于 2012-11-07T08:55:38.240 回答
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>"; }
于 2012-11-07T08:48:31.120 回答