將Excel列名映射到數字順序是種糟糕的事情,因爲AZ中沒有0
...
無論如何,我確實想出了兩個函數來將它們來回轉換:
function calcCol($col) //character to number
{
if(is_numeric($col)) return intval($col);
$col=array_reverse(str_split(strtoupper(preg_replace("/[^a-z]/i","",$col))));
$num=0;
foreach($col as $i=>$ch)
{
$num+=(ord($ch)-ord('A')+1)*pow(27,$i);
}
$num-=ceil($num/27)-1;
return $num;
}
function getCol($col) //number to character
{
if(preg_match("/^[a-z]+$/i",$col)) return strtoupper($col);
$col=abs(intval($col));
$col+=ceil($col/26)-1;
$str="";
while($col>0)
{
$tmp=$col%27;
$str=chr($tmp-1+ord('A')).$str;
$col=floor($col/27);
}
return $str;
}
說明:
考慮A-Z爲具有基於27數字系統丟失/隱藏0
;
並將字符轉換爲數字後,通過計算有多少27個「被計數」來刪除那些隱藏的0
(ceil($num/27)
);
在將數字轉換爲字符之前,通過計算有多少26個「被計數」(ceil($col/26)
),將這些隱藏的0
加回去。
感謝編輯! (Typo in title) – Ferdau
'$ id'從哪裏來?這是用戶輸入的號碼嗎? – aefxx
如果我理解正確,那麼ID 27應該是AA? – TheHe