最近在技术群中有位兄弟提出了一个问题:
想让自增的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 /> ' ;
}