web-dev-qa-db-ja.com

PHPを使用してアルファベットの次の文字を取得する最も効率的な方法

Aからzまでの任意の文字が与えられた場合、PHPを使用してアルファベットの次の文字を取得する最も効率的な方法は何ですか?

67
Mathias Bynens

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];
}
117
codaddict

Zを押したときに何をしたいかによって異なりますが、いくつかのオプションがあります。

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

また、PHPのrange()関数を使用することもできます。

_$chars = range('a', 'z');  // ['a', 'b', 'c', 'd', ...]
_
16
nickf

まあ、それはあなたが「エッジケース」で何をしたいのかによって異なります。文字が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';

これらは非常に単純な操作であり、このような場合の効率については本当に心配しません。

8
Chad Birch

ord()およびchr() を使用してはどうですか?

<?php
    $next = chr(ord($prev)+1);
?>
5
Anax

この場合は小文字のみを対象としているため、ここに投稿された回答に基づいて、次のコードを使用します。

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

助けてくれてありがとう!

3
Mathias Bynens
$val = 'z';
echo chr((((ord($val) - 97) + 1) % 26) + 97);

素敵で簡単:-)

3
DoXicK

すべての文字の配列を作成し、既存の文字を検索して、次の文字を返します。最後の文字に到達したら、最初の文字を返します。

0
user325894