74

给定从 a 到 z 的任何字符,使用 PHP 获取字母表中下一个字母的最有效方法是什么?

4

7 回答 7

134

在我看来,最有效的方法是增加字符串变量。

$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];
}
于 2010-04-20T07:37:31.107 回答
19

这取决于你在击中 Z 时想要做什么,但你有几个选择:

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

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

$chars = range('a', 'z');  // ['a', 'b', 'c', 'd', ...]
于 2010-04-20T07:36:58.793 回答
8

好吧,这取决于您想对“边缘情况”做什么。z当角色是or时,您期望什么结果Z?你想要相同大小写的下一个字母,还是只想要下一个字母,句号?

在不知道答案的情况下,对于非常基本的情况,您可以这样做:

$next_character = chr(ord($current_character) + 1);

但是当你在Z这的时候会给你[,并且z会给你{,根据 ASCII 值。


根据评论编辑:

如果您需要相同大小写的下一个字符,您可以在上面的行之后添加简单的检查:

if ($next_character == '[')
    $next_character = 'A';
else if ($next_character == '{')
    $next_character = 'a';

这些都是非常简单的操作,在这种情况下我真的不会担心效率。

于 2010-04-20T07:36:47.703 回答
5

使用ord() 和 chr()怎么样?

<?php
    $next = chr(ord($prev)+1);
?>
于 2010-04-20T07:37:07.953 回答
3

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

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

谢谢你们的帮助,伙计们!

于 2010-04-20T07:42:49.000 回答
3
$val = 'z';
echo chr((((ord($val) - 97) + 1) % 26) + 97);

好,易于 :-)

于 2010-04-20T09:08:01.257 回答
0

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

于 2010-05-03T12:26:46.917 回答