Приращения Письма, подобные цифрам

Я хотел бы написать функцию, которая принимает 3 символа и увеличивает его и возвращает вновь увеличивающиеся символы в виде строки.

Я знаю, как увеличить одну букву до следующей, но как я узнаю, когда увеличить буквы, а затем остановить, а затем увеличить первую букву, чтобы получить последовательное увеличение?

Поэтому, если AAA передан, верните AAB. Если AAZ передается обратно ABA (твердая часть).

Я был бы признателен за помощь в логике и какие функции php будут полезны для использования.

Еще лучше, некоторые сделали это уже или есть класс, доступный для этого?

Спасибо всем за любую помощь

Solutions Collecting From Web of "Приращения Письма, подобные цифрам"

Приращение символов / строк работает в PHP (хотя декремент не работает)

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

Вы можете сделать это с помощью оператора ++.

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

аба

Однако эта реализация имеет некоторые странные вещи:

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

Это напечатает буквы от a до y .

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

Это будет печатать lettes от a до z и оно продолжается с aa и заканчивается на yz .

Вы смотрите на проблему с числом представлений. Это base24 (или сколько бы ни было число ваших алфавитов). Позволяет вызвать базу b.

Назначьте число каждой букве в алфавите (A = 1, B = 2, C = 3).

Затем укажите свой номер «число»: представление «ABC» означает A*b^2 + B*b^1 + C*b^0 Используйте эту формулу, чтобы найти номер (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 для альфа-чисел. Оттуда вы увеличиваете и уменьшаете, чтобы получить предыдущий / следующий символ.

Вы можете разделить строку на отдельные символы, а затем применить преобразования к этим символам.

Просто некоторые мысли, чтобы вы начали.

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