Algorithm to get the excel-like column name of a number

后端 未结 10 1842
囚心锁ツ
囚心锁ツ 2020-11-30 18:08

I\'m working on a script that generate some Excel documents and I need to convert a number into its column name equivalent. For example:

1 => A
2 => B
         


        
10条回答
  •  [愿得一人]
    2020-11-30 18:22

    Late answer, but here's what I did (for 1==A indexed):

    function num_to_letters($num, $uppercase = true) {
        $letters = '';
        while ($num > 0) {
            $code = ($num % 26 == 0) ? 26 : $num % 26;
            $letters .= chr($code + 64);
            $num = ($num - $code) / 26;
        }
        return ($uppercase) ? strtoupper(strrev($letters)) : strrev($letters);
    }
    

    Then if you want to convert the other way:

    function letters_to_num($letters) {
        $num = 0;
        $arr = array_reverse(str_split($letters));
    
        for ($i = 0; $i < count($arr); $i++) {
            $num += (ord(strtolower($arr[$i])) - 96) * (pow(26,$i));
        }
        return $num;
    }
    

提交回复
热议问题