【问题标题】:PHP infinity loop [While]PHP 无限循环 [While]
【发布时间】:2014-05-30 01:00:01
【问题描述】:

我在使用 PHP 时遇到了一些问题。

我使用 while 对一个数字的位数求和,结果总是超过两位数,不知何故,它进入了一个无限循环。 例如: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;
}

谁能帮帮我?我猜这是一个简单的错误,但我无法修复它。

【问题讨论】:

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


    【解决方案1】:

    我会说这看起来更干净:

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

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

    【讨论】:

      【解决方案2】:

      你想做什么? 我不清楚。

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

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

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

      【讨论】:

      • 1234 -> 1+2+3+4 -> 10 -> 1 + 0 -> 1
      【解决方案3】:

      您需要在 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;
      }
      

      【讨论】:

        【解决方案4】:

        看看这一行:

         $numPer = (string) $somaP;
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-11-19
          • 2016-08-28
          • 2015-06-25
          • 1970-01-01
          • 2012-10-29
          • 2014-03-29
          • 2016-08-27
          • 2011-09-26
          相关资源
          最近更新 更多