php - 编码一般的 4 位字母数字系列

标签 php string logic sequence alphanumeric

尝试用 PHP 编写一个通用的 4 位字母数字系列。

图案如下
0000
0001
....
....
9999
A000
A001
....
....
A999
B000
....
....
Z999
AA00
....
....
AA99
AB00
....
....
ZZ99
AAA0
....
....
AAA9
AAB0
....
....
ZZZZ

我试图根据 Z 的编号和 9 的编号来制定逻辑,但无法获得任何具体的进展。

我正在尝试编写一个代码,该代码将在输入系列的最后一个数字时返回系列的下一个数字。

任何提示或线索将不胜感激

最佳答案

这在使用 PHP 的内置 increment operator 时实际上非常容易它能够像这样处理字母数字序列。

有两个边界异常需要手动处理:

  1. 第一次从数字跳到字母数字
  2. 终止系列

<?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

See this related answer.

关于php - 编码一般的 4 位字母数字系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37782143/

相关文章:

c - NASM 汇编数理逻辑

php - cakephp 中的嵌套路由,关联模型

javascript - 在一个 ajax 帖子上发布表单和文本区域

javascript - ajax不调用成功或错误函数

php - 如何存储音频文件的缓存值?

c++ - 当访问要插入 union vector 中的字符串字符时, vector 中的字符串会变得困惑

java - java中具有可变数量参数的字符串格式

prolog - Prolog 中的逻辑

c# - C#如何检查字符串中重复的字母

logic - 如何证明排中律在 Coq 中是无可辩驳的?