最近在技术群中有位兄弟提出了一个问题:
想让自增的ID格式化为
A001——A999
B001——B999
……
Z001——Z999,
我最初的构思是循环中,分if条件判断出来进行A——Z字母,
但是这样做有个极大的缺点,代码显得很呆板冗余,26个英文字母等于需要26个判断。
后来有人支招将字母变成ASCⅡ码,恰好A——Z等于ASCⅡ码的65——91;
这样就只需要一个函数进行格式化ID就可以了:
function format_string($num) {
$tag=floor(($num-1)/999);
//part1计算asc码
$part1=65+$tag;
//part2计算数字部分
$part2=$num-999*$tag;
$a=strlen($part2);
for($i=0;$i<(3-$a);$i++)
{
$b.=0;
}
$str=chr($part1).$b.$part2;
return $str;
}
for($i=1;$i<5000;$i++)
{
echo $str=format_string($i).'<br />';
}
$tag=floor(($num-1)/999);
//part1计算asc码
$part1=65+$tag;
//part2计算数字部分
$part2=$num-999*$tag;
$a=strlen($part2);
for($i=0;$i<(3-$a);$i++)
{
$b.=0;
}
$str=chr($part1).$b.$part2;
return $str;
}
for($i=1;$i<5000;$i++)
{
echo $str=format_string($i).'<br />';
}