递增字母像数字

我想写一个函数,它需要3个字符并递增,并将新增加的字符作为string返回。

我知道如何增加一个字母到下一个字母,但我怎么知道什么时候增加第二个字母,然后停止,然后再增加第一个字母,以便有一个连续的增加?

所以如果AAA通过,返回AAB。 如果AAZ通过,则返回ABA(难度部分)。

我将不胜感激的帮助逻辑和什么PHPfunction将是有用的使用。

更好的是,有一些已经做到这一点,或有一个类可以做到这一点?

感谢所有的帮助

字符/string增量在PHP中工作(虽然递减不)

$x = 'AAZ'; $x++; echo $x; 

你可以用++运算符来完成。

 $i = 'aaz'; $i++; print $i; 

ABA

但是这个实现有一些奇怪的事情:

 for($i = 'a'; $i < 'z'; $i++) print "$i "; 

这将打印出从ay信件。

 for($i = 'a'; $i <= 'z'; $i++) print "$i "; 

这将从a打印出zz ,然后继续aa并以yz结束。

您正在查看数字表示问题。 这是base24(或者你的字母表有多less个数字)。 让我们打电话给基地b。

为每个字母(A = 1,B = 2,C = 3)分配一个数字。

接下来,找出你的input“数字”:表示“ABC”意味着A*b^2 + B*b^1 + C*b^0使用这个公式find数字(int)。 增加它。

接下来,将它转换回你的数字系统:除以b^2得到第三位数,其余(模)由b^1代替第二位数,余数(模)由`b ^ 0 ^代表最后一位。

这可能会有所帮助: 如何从base10转换到任何其他基地 。

我有这些方法在C#,你可能会转换为PHP和修改,以满足您的需求,我不知道Hexavigesimal是这些虽然确切的名称…

 #region Hexavigesimal (Excel Column Name to Number) public static int FromHexavigesimal(this string s) { int i = 0; s = s.Reverse(); for (int p = s.Length - 1; p >= 0; p--) { char c = s[p]; i += c.toInt() * (int)Math.Pow(26, p); } return i; } public static string ToHexavigesimal(this int i) { StringBuilder s = new StringBuilder(); while (i > 26) { int r = i % 26; if (r == 0) { i -= 26; s.Insert(0, 'Z'); } else { s.Insert(0, r.toChar()); } i = i / 26; } return s.Insert(0, i.toChar()).ToString(); } public static string Increment(this string s, int offset) { return (s.FromHexavigesimal() + offset).ToHexavigesimal(); } private static char toChar(this int i) { return (char)(i + 64); } private static int toInt(this char c) { return (int)c - 64; } #endregion 

编辑

我从其他答案看到,在PHP中,你可以使用++而不是!

你可以使用ASCII码作为字母数字。 从那里你增加和减less获得前一个/下一个字符。

您可以将string拆分为单个字符,然后对这些字符应用转换。

只是一些想法,让你开始。

  <?php $values[] = 'B'; $values[] = 'A'; $values[] = 'Z'; foreach($values as $value ){ if($value == 'Z'){ $value = '-1'; } $op = ++$value; echo $op; } ?>