PHP无限循环[While]

时间:2014-04-15 15:07:39

标签: php for-loop while-loop sum infinite-loop

我遇到了一些PHP问题。

我使用总结一个数字的数字总是它有两个以上的数字,一些如何,它进入一个无限循环。 例如:56 = 5 + 6 = 11 = 1 + 1 = 2.

以下是代码:

$somaP = 0;

$numPer = (string)$numPer; //$numPer = number calculated previously

while (strlen($numPer) > 1){
    for ($j = 0; $j < strlen($numPer); $j++){
        $somaP = $somaP + (int)($numPer[$j]);
    }
    $numPer = (string) $somaP;
}

任何人都可以帮助我吗?猜猜这是一个简单的错误,但我无法解决它。

4 个答案:

答案 0 :(得分:0)

看看这一行:

 $numPer = (string) $somaP;

似乎$ somaP的长度永远不会小于(或等于)1.所以$ numPer的长度永远不会小于(或等于)。

答案 1 :(得分:0)

您需要在while循环中重置$ somaP的值。

目前,每次循环都会继续增加其值。

试试这个:

$numPer = (string)$numPer; //$numPer = number calculated previously

while (strlen($numPer) > 1){
    $somaP = 0;
    for ($j = 0; $j < strlen($numPer); $j++){
        $somaP = $somaP + (int)($numPer[$j]);
    }
    $numPer = (string) $somaP;
}

答案 2 :(得分:0)

你想做什么? 我不清楚。

例如,这会将字符串中的每个数字加在一起吗?

例如“1234”= 1 + 2 + 3 + 4 = 10

 $total = 0;
 for($i = 0; i < strlen($string); $i++){
        $total += $string[$i];
 }
 echo $total;

答案 3 :(得分:0)

我会说这看起来更干净:

$numPer = 56;
while ($numPer > 9){
    $numPer = array_sum(str_split($numPer));
}
echo $numPer;

PHP处理所有字符串&lt;&gt;为您编号转换,因此除非确实需要,否则无需对数字执行(字符串)。