2015-05-29 52 views
2

我有此數組這在目前這樣的鏈接編號,以字母:號與邏輯順序字母

1-26 = AZ

但是,還有更多,27 = AA和28 = AB等...

所以基本上,當我這樣做:

var_dump($array[2]); //shows B 
var_dump($array[29]); //shows AC 

現在這陣我自己做了,但它變得太長時間。有沒有辦法讓這件事情繼續下去,直到讓我們說32?我知道有chr,但我不認爲我可以使用這個。

有沒有一種更簡單的方法來實際得到這個,而不使用這種方式太長的數組?

回答

3

它的速度較慢這樣計算它,但你可以採取的事實,即PHP可以讓你以同樣的方式爲數字遞增字母,Perl的風格:

function excelColumnRange($number) { 
    $character = 'A'; 
    while ($number > 1) { 
     ++$character; 
     --$number; 
    } 
    return $character; 
} 

var_dump(excelColumnRange(2)); 
var_dump(excelColumnRange(29)); 
+0

這是不是你實際使用還是你猜,我用Excel?因爲如果你這樣做,我正在使用excel,並且給我留下了深刻的印象。 – Loko

+2

@Loko - 與我實際使用的類似,但作爲PHPExcel的作者,我做了很多這類事情..... PHPExcel本身使用公式,並緩存計算出的性能值;但我確實在這個方法上使用了一個變體來迭代列的範圍 –

+0

'但作爲PHPExcel'的作者無法得到更真實的:) –

1

這應該爲你工作:

即使沒有任何循環。首先,我計算字母(26)進入數字的次數。有了這個,我定義了它的次數爲str_repleat() A.然後我簡單地減去這個數字,然後用剩下的數字計算出字母表中的數字。

<?php 

    function numberToLetter($number) { 
     $fullSets = (($num = floor(($number-1)/26)) < 0 ? 0 : $num); 
     return str_repeat("A", $fullSets) . (($v = ($number-$fullSets*26)) > 0 ? chr($v+64) : ""); 
    } 

    echo numberToLetter(53); 

?> 

輸出:

AAA