给定从a到z的任何字符,使用PHP获取字母表中下一个字母的最有效方法是什么?
给定从a到z的任何字符,使用PHP获取字母表中下一个字母的最有效方法是什么?
Answers:
我认为最有效的方法是增加字符串变量。
$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];
}
$b=++$a;
@nickf:谢谢:)
$next_ch = $ch++;
不会存储在递增值$next_ch
,而是会在事实上增加$ch
。在那里让我困惑了几秒钟:)很好的提示,我什至不知道这是可能的。绝对是最有效的方法!
好吧,这取决于您对“边缘保护套”到底要做什么。当字符为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';
这些操作非常简单,在这种情况下,我真的不担心效率。
z
,我希望a
。
A
或a
立即返回会更快吗?Z
z
如何使用ord()和chr()呢?
<?php
$next = chr(ord($prev)+1);
?>
z
应该返回a
)呢?除了if ()
声明以外,还有没有更好的方法来检查此内容?
由于在这种情况下我只关心小写字符,因此我将根据此处发布的答案使用以下代码:
function nextLetter(&$str) {
$str = ('z' === $str ? 'a' : ++$str);
}
谢谢大家的帮助!
$val = 'z';
echo chr((((ord($val) - 97) + 1) % 26) + 97);
好,易于 :-)
$next=chr((((ord($c) - 65) + 1) % 26) + 65);
即为ord('A')
$b = ++$a;