Для любого символа от a до z, каков наиболее эффективный способ получить следующую букву в алфавите с помощью PHP?
Самый эффективный способ получить следующую букву в алфавите с помощью PHP
Ответ 1
Самый эффективный способ сделать это, на мой взгляд, - это просто увеличить строковую переменную.
$str = 'a';
echo ++$str; // prints 'b'
$str = 'z';
echo ++$str; // prints 'aa'
Как видно, приращение 'z'
дает 'aa'
, если вы этого не хотите, но вместо этого хотите reset получить 'a'
, вы можете просто проверить длину результирующей строки и если ее >1
reset it.
$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];
}
Ответ 2
Это зависит от того, что вы хотите сделать, когда вы нажмете Z, но у вас есть несколько вариантов:
$nextChar = chr(ord($currChar) + 1); // "a" -> "b", "z" -> "{"
Вы также можете использовать функцию PHP range()
:
$chars = range('a', 'z'); // ['a', 'b', 'c', 'd', ...]
Ответ 3
Ну, это зависит от того, что именно вы хотите делать с "краевыми случаями". Какой результат вы ожидаете, когда символ 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';
Это очень простые операции, я действительно не буду беспокоиться об эффективности в таком случае.
Ответ 4
Как насчет использования ord() и chr()?
<?php
$next = chr(ord($prev)+1);
?>
Ответ 5
Так как в этом случае меня интересуют только символы нижнего регистра, я буду использовать следующий код, основываясь на ответах, размещенных здесь:
function nextLetter(&$str) {
$str = ('z' === $str ? 'a' : ++$str);
}
Спасибо за помощь, ребята!
Ответ 6
$val = 'z';
echo chr((((ord($val) - 97) + 1) % 26) + 97);
Приятно и легко: -)
Ответ 7
Создайте массив всех букв, найдите существующую букву и верните ее следующую букву. Если вы дойдете до последней буквы, верните первую букву.