Самый эффективный способ получить следующую букву в алфавите с помощью PHP

Для любого символа от a до z, каков наиболее эффективный способ получить следующую букву в алфавите с помощью PHP?

Самый эффективный способ сделать это, на мой взгляд, – просто увеличить строковую переменную.

$str = 'a'; echo ++$str; // prints 'b' $str = 'z'; echo ++$str; // prints 'aa' 

Как видно, приращение 'z' дает 'aa' если вы этого не хотите, но вместо этого хотите сбросить, чтобы получить 'a' вы можете просто проверить длину результирующей строки и если ее >1 сбросить ее.

 $ch = 'a'; $next_ch = ++$ch; if (strlen($next_ch) > 1) { // if you go beyond z or Z reset to a or A $next_ch = $next_ch[0]; } 

Это зависит от того, что вы хотите сделать, когда вы нажмете Z, но у вас есть несколько вариантов:

 $nextChar = chr(ord($currChar) + 1); // "a" -> "b", "z" -> "{" 

Вы также можете использовать функцию range() PHP:

 $chars = range('a', 'z'); // ['a', 'b', 'c', 'd', ...] 

Ну, это зависит от того, что именно вы хотите делать с «краевыми случаями». Какой результат вы ожидаете, когда персонажем является z или Z ? Вы хотите, чтобы следующая буква одного и того же дела , или просто следующее письмо, период?

Не зная ответа на этот вопрос, в самом основном случае вы можете просто сделать это:

 $next_character = chr(ord($current_character) + 1); 

Но когда вы в Z это даст вам [ , и z даст вам { , в соответствии со значениями ASCII.


Отредактировано в соответствии с комментарием:

Если вам нужен следующий символ того же случая, вы можете просто добавить простые проверки после строки выше:

 if ($next_character == '[') $next_character = 'A'; else if ($next_character == '{') $next_character = 'a'; 

Это очень простые операции, я действительно не буду беспокоиться об эффективности в таком случае.

Как насчет использования ord () и chr () ?

 <?php $next = chr(ord($prev)+1); ?> 

Поскольку в этом случае меня интересуют только символы нижнего регистра, я буду использовать следующий код на основе ответов, размещенных здесь:

 function nextLetter(&$str) { $str = ('z' === $str ? 'a' : ++$str); } 

Спасибо за помощь, ребята!

 $val = 'z'; echo chr((((ord($val) - 97) + 1) % 26) + 97); 

Легко и приятно 🙂

Создайте массив всех букв, найдите существующее письмо и верните его следующую букву. Если вы дойдете до последней буквы, верните первую букву.