Самый эффективный способ получить следующую букву в алфавите, используя PHP - PullRequest
67 голосов
/ 20 апреля 2010

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

Ответы [ 7 ]

117 голосов
/ 20 апреля 2010

Наиболее эффективный способ сделать это по моему мнению - просто увеличить строковую переменную.

$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];
}
16 голосов
/ 20 апреля 2010

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

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

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

$chars = range('a', 'z');  // ['a', 'b', 'c', 'd', ...]
8 голосов
/ 20 апреля 2010

Ну, это зависит от того, что именно вы хотите сделать с «крайними случаями». Какой результат вы ожидаете, когда персонаж 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';

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

5 голосов
/ 20 апреля 2010

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

<?php
    $next = chr(ord($prev)+1);
?>
3 голосов
/ 20 апреля 2010
$val = 'z';
echo chr((((ord($val) - 97) + 1) % 26) + 97);

Красиво и просто: -)

3 голосов
/ 20 апреля 2010

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

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

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

0 голосов
/ 03 мая 2010

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

...