<?php
/**
* 当输入一个整数时,函数返回这个整数对应的excel列名
* @example
* $num = 26 $name = Z,$num = 27 $name = AA,$num = 52 $name = ZZ, $num = 53 $name = AAA .......依次累推
* @param int $num
*/
function showname($num) {
//定义一个数组
$arr = array(0 => '', 1 => 'A', 2 => 'B', 3 => 'C', 4 => 'D', 5 => 'E',
6 => 'F', 7 => 'G', 8 => 'H', 9 => 'I', 10 => 'J', 11 => 'K',
12 => 'L', 13 => 'M', 14 => 'N', 15 => 'O', 16 => 'P', 17 => 'Q',
18 => 'R', 19 => 'S', 20 => 'T', 21 => 'U', 22 => 'V', 23 => 'W',
24 => 'X', 25 => 'Y', 26 => 'Z'
);
$n = (int)($num/26); //取得整数倍
$m = $num%26; //取得余数
static $name;
if ($n <= 26) {
if ($m == 0) {
$name .= $arr[$n-1].'Z';
}else {
$name .= $arr[$n].$arr[$m];
}
}else {
//$name .= $arr[$n-26];
$name .= showname($n-1+$m);
}
return $name;
}
$num = 26*27;
echo showname($num);
?>
26倍以下的测试没有问题,以上的就出问题了,不清楚是哪的问题,谁能看看?
/**
* 当输入一个整数时,函数返回这个整数对应的excel列名
* @example
* $num = 26 $name = Z,$num = 27 $name = AA,$num = 52 $name = ZZ, $num = 53 $name = AAA .......依次累推
* @param int $num
*/
function showname($num) {
//定义一个数组
$arr = array(0 => '', 1 => 'A', 2 => 'B', 3 => 'C', 4 => 'D', 5 => 'E',
6 => 'F', 7 => 'G', 8 => 'H', 9 => 'I', 10 => 'J', 11 => 'K',
12 => 'L', 13 => 'M', 14 => 'N', 15 => 'O', 16 => 'P', 17 => 'Q',
18 => 'R', 19 => 'S', 20 => 'T', 21 => 'U', 22 => 'V', 23 => 'W',
24 => 'X', 25 => 'Y', 26 => 'Z'
);
$n = (int)($num/26); //取得整数倍
$m = $num%26; //取得余数
static $name;
if ($n <= 26) {
if ($m == 0) {
$name .= $arr[$n-1].'Z';
}else {
$name .= $arr[$n].$arr[$m];
}
}else {
//$name .= $arr[$n-26];
$name .= showname($n-1+$m);
}
return $name;
}
$num = 26*27;
echo showname($num);
?>
26倍以下的测试没有问题,以上的就出问题了,不清楚是哪的问题,谁能看看?
function showname($num) {
//定义一个数组
if($num==0) return '';
$arr = array(0 => '', 1 => 'A', 2 => 'B', 3 => 'C', 4 => 'D', 5 => 'E',
6 => 'F', 7 => 'G', 8 => 'H', 9 => 'I', 10 => 'J', 11 => 'K',
12 => 'L', 13 => 'M', 14 => 'N', 15 => 'O', 16 => 'P', 17 => 'Q',
18 => 'R', 19 => 'S', 20 => 'T', 21 => 'U', 22 => 'V', 23 => 'W',
24 => 'X', 25 => 'Y', 26 => 'Z'
);
$n = intval($num/26); //取得整数倍
$m = $num%26; //取得余数
return showname($n).$arr[$m];
}
//定义一个数组
if($num==0) return '';
$arr = array(0 => 'Z', 1 => 'A', 2 => 'B', 3 => 'C', 4 => 'D', 5 => 'E',
6 => 'F', 7 => 'G', 8 => 'H', 9 => 'I', 10 => 'J', 11 => 'K',
12 => 'L', 13 => 'M', 14 => 'N', 15 => 'O', 16 => 'P', 17 => 'Q',
18 => 'R', 19 => 'S', 20 => 'T', 21 => 'U', 22 => 'V', 23 => 'W',
24 => 'X', 25 => 'Y' ,26=>'Z'
);
$n = intval(($num-1)/26); //取得整数倍
$m = $num%26; //取得余数 return showname($n).$arr[$m];
}
$num = 26;
echo showname($num)."\n"; //Z
$num = 26+3;
echo showname($num)."\n"; //AC$num = 26*26+2;
echo showname($num)."\n"; //ZB$num = 26*27+1;
echo showname($num)."\n"; //AAA$num = 26+26*26+26*26*26;
echo showname($num)."\n"; //ZZZ$num = 26+26*26+26*26*26+1;
echo showname($num)."\n"; //AAAA
function showname($num) {
if($num==0) return '';
$arr ='ZABCDEFGHIJKLMNOPQRSTUVWXY';
$n = intval(($num-1)/26); //取得整数倍
$m = $num%26; //取得余数
return showname($n).$arr{$m};
}
2.将最后一位去掉 (如ABC去掉最后一位就是AB)
3.剩下的数继续进行1、2、3,直到num=0为止