【问题标题】:PHP infinite for(;;) loopPHP 无限 for(;;) 循环
【发布时间】:2017-10-08 04:38:41
【问题描述】:

嗨,我刚开始在学校经常做 PHP,现在我在学校有这个项目,当我的代码到达这部分时:

for ($i=0; $i<=sizeof($kentat_taulukkona); +$i) {
    echo $i;
    if($i=1) {
        $a = "=".$arvot_taulukkona[$i];
        $aa = $kentat_taulukkona[$i];
    } else if($i=2) {
        $b = "=".$arvot_taulukkona[$i];
        $ab = ", ".$kentat_taulukkona[$i];
    } else if($i=3) {
        $c = "=".$arvot_taulukkona[$i];
        $ac = ", ".$kentat_taulukkona[$i];
    } else if($i=4) {
        $d = "=".$arvot_taulukkona[$i];
        $ad = ", ".$kentat_taulukkona[$i];
    } else if($i=5) {
        $e = "=".$arvot_taulukkona[$i];
        $ae = ", ".$kentat_taulukkona[$i];
    } else if($i=6) {
        $f = "=".$arvot_taulukkona[$i];
        $af = ", ".$kentat_taulukkona[$i];
        break;
    }
}

它变成了一个无限循环。有了那个回声,我发现它首先回显一个 0,然后是那个数字 1,直到世界末日。这可能只是我遗漏的错字,或者我理解错了什么,因为据我所知这应该有效?

【问题讨论】:

  • 你认为+$i 会做什么?
  • 除了约翰所说的,$i=1 你不是在比较 (==),而是在设置。
  • sizeof($kentat_taulukkona) 的动态循环,但在第 6 次迭代时中断。奇怪...
  • 您应该使用数组而不是创建所有这些变量。为了改进您的代码,您还可以搜索:foreachrange,如果您很热门:array_map
  • 是的,Sterling 我是出于绝望才这样做的,因为我不明白出了什么问题,我尝试了各种愚蠢的东西,也只有一个“+”,因为在我取下一个之前,它总是重复数字 2 和我以为我误解了它,使用 '++' 它总是会加两个。

标签: php


【解决方案1】:

将循环的第一行改成这样:

for ($i=0; $i<=sizeof($kentat_taulukkona); ++$i) { ....

你的 IF 语句需要改成这样(双等号测试相等):

if($i==1) {...

【讨论】:

    【解决方案2】:

    您需要使用比较运算符,例如 ==,而不是赋值运算符 =

    所以你的代码应该是:

    if($i==1) {
        $a = "=".$arvot_taulukkona[$i];
        $aa = $kentat_taulukkona[$i];
    }else if($i==2) {
        $b = "=".$arvot_taulukkona[$i];
        $ab = ", ".$kentat_taulukkona[$i];
    } else if($i==3) {
        $c = "=".$arvot_taulukkona[$i];
        $ac = ", ".$kentat_taulukkona[$i];
    } else if($i==4) {
        $d = "=".$arvot_taulukkona[$i];
        $ad = ", ".$kentat_taulukkona[$i];
    } else if($i==5) {
        $e = "=".$arvot_taulukkona[$i];
        $ae = ", ".$kentat_taulukkona[$i];
    }else if($i==6) {
        $f = "=".$arvot_taulukkona[$i];
        $af = ", ".$kentat_taulukkona[$i];
        break;
    

    此外,如果您想通过使用 $i++ 来保持 $i 的价值增加,从而使您的代码看起来像:

    for ($i=0; $i<=sizeof($kentat_taulukkona); $i++) {
        echo $i;
        if($i==1) {
            $a = "=".$arvot_taulukkona[$i];
            $aa = $kentat_taulukkona[$i];
        } else if($i==2) {
            $b = "=".$arvot_taulukkona[$i];
            $ab = ", ".$kentat_taulukkona[$i];
        } else if($i==3) {
            $c = "=".$arvot_taulukkona[$i];
            $ac = ", ".$kentat_taulukkona[$i];
        } else if($i==4) {
            $d = "=".$arvot_taulukkona[$i];
            $ad = ", ".$kentat_taulukkona[$i];
        } else if($i==5) {
            $e = "=".$arvot_taulukkona[$i];
            $ae = ", ".$kentat_taulukkona[$i];
        } else if($i==6) {
            $f = "=".$arvot_taulukkona[$i];
            $af = ", ".$kentat_taulukkona[$i];
            break;
        }
    }
    

    更新 正如@SterlingBeason 建议的那样,请考虑根据您的需要使用前缀 ++$i 或后缀 $i++ 运算符。要详细了解运营商的更多信息,请查看 SO What's the difference between ++$i and $i++ in PHP?的答案

    【讨论】:

    • 并且按照 Sterling 对++$i的建议进行操作
    • @ShaktiPhartiyal 在 int 变量中添加和添加“++”会做不同的事情。 ++ 需要在 $i 变量前面加上第一个 IF 条件才能满足为真。 ($i==1)
    • @SterlingBeason 我同意你的前缀和后缀运算符的操作是不同的。不确定 OP 是否要使用哪一个.. 但肯定会在我的答案中添加它..
    • 感谢您的回答,我不敢相信我这样做了,而且最重要的是没有注意到它。我将它保留为 ++$i 因为我不太确定是否理解其中的区别,而且它似乎可以工作。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多