递增字母像数字
我想写一个函数,它需要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 ";
这将打印出从a
到y
信件。
for($i = 'a'; $i <= 'z'; $i++) print "$i ";
这将从a打印出z
到z
,然后继续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; } ?>