Saya sedang mengerjakan skrip yang menghasilkan beberapa dokumen Excel dan saya perlu mengonversi angka menjadi nama kolom yang setara. Sebagai contoh:
1 => A
2 => B
27 => AA
28 => AB
14558 => UMX
Saya sudah menulis algoritme untuk melakukannya, tetapi saya ingin tahu apakah cara yang lebih sederhana atau lebih cepat untuk melakukannya:
function numberToColumnName($number){
$abc = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$abc_len = strlen($abc);
$result_len = 1; // how much characters the column's name will have
$pow = 0;
while( ( $pow += pow($abc_len, $result_len) ) < $number ){
$result_len++;
}
$result = "";
$next = false;
// add each character to the result...
for($i = 1; $i<=$result_len; $i++){
$index = ($number % $abc_len) - 1; // calculate the module
// sometimes the index should be decreased by 1
if( $next || $next = false ){
$index--;
}
// this is the point that will be calculated in the next iteration
$number = floor($number / strlen($abc));
// if the index is negative, convert it to positive
if( $next = ($index < 0) ) {
$index = $abc_len + $index;
}
$result = $abc[$index].$result; // concatenate the letter
}
return $result;
}
Apakah Anda tahu cara yang lebih baik untuk melakukannya? Mungkin sesuatu untuk membuatnya lebih sederhana? atau peningkatan kinerja?
Edit
Implementasi ircmaxell bekerja dengan baik. Tapi, saya akan menambahkan pendek yang bagus ini:
function num2alpha($n)
{
for($r = ""; $n >= 0; $n = intval($n / 26) - 1)
$r = chr($n%26 + 0x41) . $r;
return $r;
}