嵌套for循环给出无关的输出

时间:2013-10-09 16:50:35

标签: php for-loop nested-loops

我想打印从1user_input_limit的值。但每4个值之后。应该有1个断行,为此我使用下面的代码,这是行不通的。它在第二次交互中重复+1的值。

我的代码: -

if(is_numeric($_GET['num'])) {
    $num = ceil($_GET['num']/4);

    for($i=1;$i<=$num;$i++) {

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

        for($j=$i;$j<=$i+3;$j++) {
            echo $j.", ";
        }

       echo '</div>';

        echo '<br />';
    }
}

这适用于第一行,但在下一行中,j变为2,这不是我需要的,我希望它是5。如下所示

我需要什么: - User_input = 11

<div class='hello'>1,  2,  3,  4, </div> 
<div class='hello'>5,  6,  7,  8, </div>
<div class='hello'>9, 10,  11, </div>

我的内部循环错误,我得到的输出如下: -

我得到的是什么: -

1,  2,  3,  4, 
2,  3,  4,  5, 
3,  4,  5,  6, 

任何人都可以修复我的算法。

由于

3 个答案:

答案 0 :(得分:4)

不要使用内循环。

if(is_numeric($_GET['num'])) {
    for($i=1;$i<=$_GET['num'];$i++) {
        if ($i % 4 == 1) {
            echo '<div class="hello">';
        }
        echo $i.", ";
        if ($i % 4 == 0 || $i == $_GET['num']) {
            echo '</div>';
        }
    }
}

修改

如果您想知道是否可以使用嵌套循环,这里有一个可能的解决方案:

if(is_numeric($_GET['num'])) {
    for($i=0;$i<ceil($_GET['num']/4);$i++) {
        echo '<div class="hello">';
        for($j=$i*4+1;$j<=$i*4+4 && $j <= $_GET['num'];$j++) {
            echo $j.", ";
        }
        echo '</div>';
    }
}

你可以注意到,这很难看:)。

答案 1 :(得分:1)

对于分组字符串是:

if(is_numeric($_GET['num'])) {
    echo '<div class="hello">';

    for($i=1;$i<=$_GET['num'];$i++) {
        echo $i . ($i < $_GET['num'] ? ', ' : '');

        if ($i % 4 == 0) {
            echo '</div>' . ($i < $_GET['num'] ? '<div class="hello">' : '');
        }
    }

    echo $_GET['num'] % 4 ? '</div>' : '';
}

答案 2 :(得分:0)

为什么不

if(is_numeric($_GET['num'])) {
    $num = intval($_GET['num']);
    for($i=1;$i<=$num;$i++) {
        echo "$i, ";
        if(!($i%4)) echo '<br />';
        }
    }