PHP嵌套循环Bug

时间:2017-01-25 22:43:30

标签: php loops for-loop nested

我已经开发了以下代码来查找100到1000之间的所有阿姆斯特朗号码,但由于某种原因,其行为不符合预期。

for($i=99;$i<1000;$i++){
    $x = str_split($i);
    $arm = 0;
    foreach ($x as $n){
        $arm = $arm + pow($n,3);
        if ($arm == $i){
            echo $i."\n";
        }
     }
 }

代码检查$ i的值与$ arm的值,如果匹配,则打印$ i。意思是$ i是一个非常强的数字。输出如下。

153
370
370
371
407

由于某种原因,打印两次370,但根据第一个循环$ i将只保持一次370的值。所以为什么我得到两次370 ???

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

你得到370两次是因为:

33 + 73 == 33 + 73 + 03  //27 + 343  == 27 + 343 + 0

在将所有内容添加到一起时,尝试在 foreach循环之后放置if语句

for($i = 99; $i < 1000; $i++){

    $x = str_split($i);
    $arm = 0;

    foreach ($x as $n){
        $arm = $arm + pow($n, 3);
    }

    if ($arm == $i){
        echo $i . "\n";
    }

}