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


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

7 61

7 ответов:

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

$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" -> "{"

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

$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);

мило и легко :-)

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