转换字符;像A到B,B到C,

时间:2015-05-09 16:35:09

标签: php regex string character

我希望有一种简短易行的方法来取代字符:
PHP中的A到B,B到C,Z到A,...。

我已经尝试过这个:

$pwd = "Abc";
for($char = ord('A'); $char <= ord('Z'); $char++) {
  $newc = $char+1;
  if($newc > 90)
    $newc = 65;
  $pwd = str_replace(chr($char), chr($newc), $pwd);
  $pwd = str_replace(chr($char+32), chr($newc+32), $pwd);
}
echo $pwd;

但是当我使用它时,我只得到“Aaa”......

3 个答案:

答案 0 :(得分:0)

$str = 'a';
echo ++$str; // prints 'b'

答案 1 :(得分:0)

这应该适合你:

在这里,我只需将str_split()字符串放入数组中,然后使用array_map()遍历每个字符。在那里,我检查它是小写还是大写字母。

如果是,我只是返回增加的字符,如果它超过zZ,我只返回aA

最后我只是将数组implode()再次变成一个字符串。

<?php

    $str = "Aac";

    $str = implode("", array_map(function($v){
        if(ord($v) >= 65 && ord($v) <= 90)
            return (++$v > 90 ? char(65) : $v);
        elseif(ord($v) >= 97 && ord($v) <= 122)
            return (++$v > 122 ? char(97) : $v);
        else
            return $v;
    }, str_split($str)));

    echo $str;

?>

输出:

Bbd

答案 2 :(得分:0)

这是一个完成工作的简单循环:

// A function to replace uppercase characters in a string with
// the next letter in the alphabet

function replace($str) {
    $len = strlen($str);

    for ($i = 0; $i < $len; ++$i) {
        // Check if the current character is an uppercase letter

        if (ctype_upper($str[$i])) {
            if ($str[$i] == 'Z') {
                // If it is a "Z", simply make it an "A"

                $str[$i] = 'A';
            }
            else {
                // If it is anything else, just get the next
                // character from the ASCII table

                $str[$i] = chr(ord($str[$i]) + 1);
            }
        }
    }

    return $str;
}

你可以像这样使用它:

echo replace('HELLO, YOU! ABCDEFGH...XYZ');

这将按预期输出IFMMP, ZPV! BCDEFGHI...YZA

您可以在此处详细了解ctype_upperhttp://php.net/ctype-upper - 它基本上是一个检查字符串或字符是否为大写的函数。

chrord只是将ASCII码转换为字符,反之亦然。如有必要,请阅读官方文档:http://php.net/ordhttp://php.net/chr