Aからzまでの任意の文字が与えられた場合、PHPを使用してアルファベットの次の文字を取得する最も効率的な方法は何ですか?
my意見でこれを行う最も効率的な方法は、just increment文字列変数。
$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);
素敵で簡単:-)
すべての文字の配列を作成し、既存の文字を検索して、次の文字を返します。最後の文字に到達したら、最初の文字を返します。