Учитывая любой символ от a до z, каков наиболее эффективный способ получить следующую букву в алфавите с помощью PHP?Самый эффективный способ получить следующую букву в алфавите с помощью 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
или Z
? Вы хотите следующую букву того же случая, или просто следующее письмо, период?
Не зная ответ на этот вопрос, по очень простому случаю, вы можете просто сделать это:
$next_character = chr(ord($current_character) + 1);
Но когда вы на Z
это даст вам [
и z
даст вам {
, согласно значениям ASCII.
Edited согласно комментарий:
Если вам нужен следующий символ того же дела, вероятно, можно просто добавить простые проверки после строки выше:
if ($next_character == '[')
$next_character = 'A';
else if ($next_character == '{')
$next_character = 'a';
Это очень простые операции, я действительно не стал бы беспокоиться об эффективности в таком случае.
Я хочу следующее письмо с тем же случаем. Если символ 'z', я ожидаю' a'. –
Не было бы быстрее просто возвращать 'A' или' a' сразу, когда символ 'Z' или' z'? –
Это зависит от того, что вы хотите делать, когда вы нажмете Z, но у вас есть несколько вариантов:
$nextChar = chr(ord($currChar) + 1); // "a" -> "b", "z" -> "{"
Вы также могли бы использовать range()
функции РНР:
$chars = range('a', 'z'); // ['a', 'b', 'c', 'd', ...]
Как насчет используя ord() and 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);
Приятный и удобный :-)
, а для 'Z' это '$ next = chr (((ord ($ c) - 65) + 1)% 26) + 65); 'ie ord ('A') – loretoparisi
Создать массив из всех букв, поиск существующего письма и возвращает следующую букву. Если вы дойдете до последней буквы, верните первую букву.
@Mathias была небольшая ошибка с смешиванием pre и post incrementing. Измените его на '$ b = ++ $ a;' – nickf
@Mathias: Мой плохой ... вы должны использовать pre-increment как: '$ b = ++ $ a;' @nickf: Спасибо :) – codaddict
Ваш неверно. '$ next_ch = $ ch ++;' не будет хранить добавочное значение в '$ next_ch', но * будет * фактически увеличивать' $ ch'. Смущала меня там в течение секунды :) Большой совет, хотя, я не знал, что это было возможно. Определенно, самый эффективный способ сделать это! –