在php中分组循环项

时间:2013-01-11 07:54:11

标签: php loops

我正在尝试将每个5个循环项目分组到<li></li>内,然后进一步将每个li项目分组为两个组,以便每个li的第一个项目位于一个组中,而其他4个在其他组中。

使用以下代码,我可以在li中包装循环的每5个项目,但是我无法将每个li项目分组为2个组。由于循环中有超过10个项目,这就是为什么我不能硬编码$i的值来打印div。

$i = 1;
while ($i < 10){
    echo ($i % 5 === 0) ? "<li>" : null;
        $i++;
        echo item $i;
    echo ($i % 5 === 0) ? "</li>" : null;   
}
echo ($i % 5 !== 0) ? "</li>" : null;

这是所需的输出:

<li>
    <div class="left">
        Item 1
    </div>
    <div class="right">
        Item 2
        Item 3
        Item 4
        Item 5
    </div>
</li>

<li>
    <div class="left">
        Item 6
    </div>
    <div class="right">
        Item 7
        Item 8
        Item 9
        Item 10
    </div>
</li>

演示: http://codepad.org/OztLPai8

2 个答案:

答案 0 :(得分:1)

$items = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

$lis = array_chunk($items, 5);

foreach($lis as $li)
{
    echo '<li>';

    echo '<div class="left">' . $li[0] . '</div>';

    echo '<div class="right">';

    foreach($li as $key => $value)
    {
        // Skip first item
        if($key == 0)
        {
            continue;
        }

        echo $value . '<br />';
    }

    echo '</div>';

    echo '</li>';
}

答案 1 :(得分:1)

工作示例:http://codepad.org/uHYHl6MD

<?php
// Initial group size
$groupSize = 5;
$total = 22;

// To keep track of the group
$groupCounter = $groupSize;

$isFirst = true;
$i = 1;

while($i < $total){
    echo "<li>\n";
    // Left div
    if($isFirst){
        echo "\t<div class='left'>\n";
        echo "\tItem $i\n";
        $isFirst = false;
        $i++;
        echo "\t</div>\n";
    }

    // Right div
    echo "\t<div class='right'>\n";
    while($i <= $groupCounter && $i <= $total){
        echo "\tItem $i\n";
        $i++;
    }
    echo "\t</div>\n";

    // Get to the next group
    $groupCounter += $groupSize;

    // Start with the first, first.
    $isFirst = true;

    echo "</li>\n";
}
?>