【问题标题】:nested for loop giving irrelevant output嵌套 for 循环给出不相关的输出
【发布时间】:2013-10-17 04:02:19
【问题描述】:

我想打印从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>

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

我得到了什么:-

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

谁能修复我的算法。

谢谢

【问题讨论】:

  • 小心,你写的是for($j=1;$j&lt;=$i+3;$j++)而不是for($j=$i;$j&lt;=$i+3;$j++),这对应于你当前的输出。
  • 修正了我的错字。谢谢
  • 现在你的 div 内容真的需要
    吗?
  • 是的 :).. 因为我没有用底部边距来设计它...
  • 距离上次做web开发已经有一段时间了,但是display:block不是你想做的吗?

标签: php for-loop nested-loops


【解决方案1】:

对于 div-ed 字符串是:

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>' : '';
}

【讨论】:

  • 对于 num == 4,你可能会得到意想不到的结果。另外我假设你最后一个&lt;div&gt; 实际上是&lt;/div&gt;
  • 已更新和测试。 )))) 顺便说一句,如果是最后一个逗号,则不会输出逗号。
  • 而不是将$_GET['num'] % 4 的结果放入变量并使用三元运算符。为什么最后不写if ($_GET['num'] % 4) echo '&lt;/div&gt;';
  • 关于逗号,OP根据其预期的输出示例想要它。 :)
  • @Maxime,当我写它的时候,我想我会不止一次地使用它。 :)) 已删除。谢谢你的意见。
【解决方案2】:

不要使用内部循环。

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>';
    }
}

如您所见,它很丑:)。

【讨论】:

  • 实际上我在输入它们时错过了整个 div。更新了我当前的代码。谢谢
  • 兄弟你是天才:)
【解决方案3】:

为什么不直接

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

【讨论】:

  • 我认为将is_numericintval 用于一个变量有点过度工作。 ))
  • @geomagas,兄弟,我输入了类型并错过了整个 div。更新了我的代码。谢谢
  • 哦,来吧!这是一个完全不同的问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-17
  • 1970-01-01
  • 2019-07-12
  • 2021-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多