a から z までの任意の文字が与えられた場合、PHP を使用してアルファベットの次の文字を取得する最も効率的な方法は何ですか?
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" -> "{"
range()
PHP の関数を利用することもできます。
$chars = range('a', 'z'); // ['a', 'b', 'c', 'd', ...]
まあ、それは「エッジケース」で正確に何をしたいかによって異なります。z
文字がまたはの場合、どのような結果が期待されますかZ
? 同じケースの次の文字が必要ですか、それとも次の文字、ピリオドだけが必要ですか?
それに対する答えを知らなくても、非常に基本的なケースでは、これを行うことができます:
$next_character = chr(ord($current_character) + 1);
しかし、あなたがZ
これにいるときは、ASCII 値に従ってあなたにを与え、あなた[
にを与えます。z
{
コメントに従って編集:
同じケースの次の文字が必要な場合は、おそらく上記の行の後に簡単なチェックを追加できます。
if ($next_character == '[')
$next_character = 'A';
else if ($next_character == '{')
$next_character = 'a';
これらは非常に単純な操作であり、このような場合の効率については心配する必要はありません。
ord() と chr()を使用するのはどうですか?
<?php
$next = chr(ord($prev)+1);
?>
$val = 'z';
echo chr((((ord($val) - 97) + 1) % 26) + 97);
素晴らしくて簡単:-)
この場合は小文字しか気にしないので、ここに投稿された回答に基づいて、次のコードを使用します。
function nextLetter(&$str) {
$str = ('z' === $str ? 'a' : ++$str);
}
助けてくれてありがとう、みんな!
すべての文字の配列を作成し、既存の文字を検索して次の文字を返します。最後の文字に到達した場合は、最初の文字を返します。