我希望有一种简短易行的方法来取代字符:
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”......
答案 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_upper
:http://php.net/ctype-upper - 它基本上是一个检查字符串或字符是否为大写的函数。
chr
和ord
只是将ASCII码转换为字符,反之亦然。如有必要,请阅读官方文档:http://php.net/ord和http://php.net/chr。