为什么不使用base_convert?
从 base 10 传递到 36(base_convert 的最大值)你会得到你想要的。
顺序如下:0123456789abcdefghijklmnopqrstuvwxyz
这与#Naltharial 的答案不同,但在我看来这就是你想要的。
例如:
$var = base_convert('az9',36,10);
echo base_convert($var,10,36).PHP_EOL; $var+=1;
echo base_convert($var,10,36).PHP_EOL; $var+=1;
echo base_convert($var,10,36).PHP_EOL.PHP_EOL; $var+=1;
$var = base_convert('azz',36,10);
echo base_convert($var,10,36).PHP_EOL; $var+=1;
echo base_convert($var,10,36).PHP_EOL; $var+=1;
echo base_convert($var,10,36).PHP_EOL; $var+=1;
将打印:
az9
aza
azb
azz
b00
b01
正如你真正想要的序列:abcdefghijklmnopqrstuvwxyz0123456789
你可以这样做:
// $string is the string in base36
$length = strlen($string);
$result = '';
$base36 = '0123456789abcdefghijklmnopqrstuvwxyz';
$ownBase = 'abcdefghijklmnopqrstuvwxyz0123456789';
for ($i=0; $i<$length; $i++) {
$result .= $ownBase[strpos($string[$i],$base36)];
}
你的函数可以是:
// Set a min & a max number to increment.
$number_min = '0';
$number_max = '999';
// Transform in number
$length = strlen($number_max);
$result = '';
$base36 = '0123456789abcdefghijklmnopqrstuvwxyz';
$ownBase = 'abcdefghijklmnopqrstuvwxyz0123456789';
for ($i=0; $i<$length; $i++) {
$result .= $base36[strpos($number_max[$i],$ownBase)];
}
$length = strlen($number_min);
// Number max in base 10 to reach
$nbLoop = base_convert($result,36,10);
for ($i=0; $i<$length; $i++) {
$result .= $base36[strpos($number_min[$i],$ownBase)];
}
// Number min in base 10 to reach
$nbLoop -= base_convert($result,36,10);
// Printing every number :
for ($i=base_convert($result,36,10); $i<$nbLoop; $i++) {
$string = base_convert($i,10,36);
$length = strlen($string);
$result = '';
for ($j=0; $j<$length; $j++) {
$result .= $ownBase[strpos($string[$j],$base36)];
}
echo $result;
}