Bir sayının excel gibi sütun adını almak için Algoritma

0 Cevap php

Ben bazı Excel belgeleri oluşturmak ve ben onun sütun adı eşdeğer bir sayı dönüştürmek için gereken bir senaryo üzerinde çalışıyorum. Örneğin:

1 => A
2 => B
27 => AA
28 => AB
14558 => UMX

Ben zaten bunu yapmak için bir algoritma yazdım, ama bunu yapmak için basit ya da hızlı yol olup olmadığını bilmek istiyorum:

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;
}

Bunu yapmak için daha iyi bir yol biliyor musunuz? Belki basit bir şey tutmak için? ya da bir performans iyileştirme?

Edit

ircmaxell uygulamasıdır oldukça iyi çalışıyor. Ama bu güzel kısa bir eklemek için gidiyorum:

function num2alpha($n)
{
    for($r = ""; $n >= 0; $n = intval($n / 26) - 1)
        $r = chr($n%26 + 0x41) . $r;
    return $r;
}

0 Cevap