为什么我的PHP代码无限循环?

时间:2011-09-09 20:26:36

标签: php debugging web

我有一个返回

的函数GetLetters
  1. a当我提出1

  2. b当我提出2

  3. z当我提出26

  4. aa当我提出27

  5. ab当我提出28

  6. 基本上你已经明白了,这是我的解决方案,但当我提供26以上的任何输入值时它无限循环,是否有人知道它有什么问题?

    function GetLetter($amt){
        if($amt<=26){
            return strtolower(chr(64+$amt));
        }
        $letters=array();
        while(true){
            $quotient=$amt%26;
            array_unshift($letters,GetLetter($quotient===0?26:$quotient));
            $amt=floor(($amt-1)/26);
            if($amt===0){
                break;
            }
        }
        return implode("",$letters);
    }
    

4 个答案:

答案 0 :(得分:4)

请参阅here,您要比较花车。试试intval()

所以改变

if($amt===0){

if(intval($amt)==0){

答案 1 :(得分:3)

我认为floor返回float,你使用===而不是==来与integer(0)进行比较,所以float(0)=== int(0)总是false

答案 2 :(得分:2)

作为另一种方法(注意它是O(n)):

function getLetters($n) {
    for ($chr = 'a'; --$n;) ++$chr;
    return $chr;
}

(如果你在PHP中增加一个字符,它将首先从a..z开始,然后aa..zz,依此类推,就像你想要的那样。)

答案 3 :(得分:1)

每当您使用while语句之类的重复语句时,不应使用float类型来确定重复的结束。浮点数永远不会非常精确,因此它们不是条件语句的理想选择。