使用PHP获取字母表中下一个字母的最有效方法


Answers:


127

认为最有效的方法是增加字符串变量。

$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];
}

@Mathias将前和后增量混合使用时有一个小错误。更改为$b = ++$a;
nickf

@Mathias:我的错...您应该使用预增量,如:$b=++$a;@nickf:谢谢:)
codaddict

您的代码示例不正确。$next_ch = $ch++;不会存储在递增值$next_ch,而是在事实上增加$ch。在那里让我困惑了几秒钟:)很好的提示,我什至不知道这是可能的。绝对是最有效的方法!
Mathias Bynens

4
您应该在执行此操作时考虑到语言环境。每个人的字母都不一样。
Elzo Valugi

2
有没有办法得到上一封信?-无法运作
itsazzad 2014年

18

这取决于您在按Z时要执行的操作,但是您有几种选择:

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

您还可以使用PHP的range()功能:

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

8

好吧,这取决于您对“边缘保护套”到底要做什么。当字符为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
Mathias Bynens

当字符为或时立即返回Aa立即返回会更快吗?Zz
Mathias Bynens


3

由于在这种情况下我只关心小写字符,因此我将根据此处发布的答案使用以下代码:

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

谢谢大家的帮助!


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

好,易于 :-)


而对于“ Z”,$next=chr((((ord($c) - 65) + 1) % 26) + 65);即为ord('A')
loretoparisi

0

创建一个包含所有字母的数组,搜索现有字母并返回其下一个字母。如果到达最后一个字母,请返回第一个字母。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.