尝试用 PHP 编写一个通用的 4 位字母数字系列。
图案如下
0000
0001
....
....
9999
A000
A001
....
....
A999
B000
....
....
Z999
AA00
....
....
AA99
AB00
....
....
ZZ99
AAA0
....
....
AAA9
AAB0
....
....
ZZZZ
我试图根据 Z 的编号和 9 的编号来制定逻辑,但无法获得任何具体的进展。
我正在尝试编写一个代码,该代码将在输入系列的最后一个数字时返回系列的下一个数字。
任何提示或线索将不胜感激
最佳答案
这在使用 PHP 的内置 increment operator 时实际上非常容易它能够像这样处理字母数字序列。
有两个边界异常需要手动处理:
- 第一次从数字跳到字母数字
- 终止系列
<?php
function getNext($input){
// boundary cases
switch($input){
// bridge numeric to alphanumeric
case '9999': return 'A000';
// terminate sequence, instead of expanding to 5 digits 'AAAA0'
case 'ZZZ9': return 'ZZZA';
// start over
case 'ZZZZ': return '0000';
}
// normal increment
$input = substr(++$input,0,4);
// pad with leading zeros
return str_pad($input, 4, '0', STR_PAD_LEFT);
}
$samples = [
'0000','9999','A000','A999','Z999','AA99',
'ZZ99','AAA9','ZZZ9','ZZZA','ZZZY','ZZZZ'
];
foreach ($samples as $sample)
echo $sample . ' -> ' . getNext($sample) . PHP_EOL;
0000 -> 0001
9999 -> A000
A000 -> A001
A999 -> B000
Z999 -> AA00
AA99 -> AB00
ZZ99 -> AAA0
AAA9 -> AAB0
ZZZ9 -> ZZZA
ZZZA -> ZZZB
ZZZY -> ZZZZ
ZZZZ -> 0000
关于php - 编码一般的 4 位字母数字系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37782143/