我正在尝试创建一个PHP函数,使用字母向下移动字符串或使用他们选择的值向上移动字母表。
这是我到目前为止所做的:
function encrypt($in, $n) {
$in = strtolower($in);
$let = array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z");
$num = array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25");
$negnum = array("-26", "-25", "-24", "-23", "-22", "-21", "-20", "-19", "-18", "-17", "-16", "-15", "-14", "-13", "-12", "-11", "-10", "-9", "-8", "-7", "-6", "-5", "-4", "-3", "-2", "-1");
$nums = str_replace($let, $num, $in);
$temp = str_split($nums, 1);
foreach($temp as &$v) {
$v = ($v + $n);
if($v == 0 or $v > 0){
$v = str_replace($num, $let, $v);
} else {
$v = str_replace($negnum, $let, $v);
}
}
return implode('', $temp);
}
echo encrypt('EPPEABBOADBFTBS', '-3');
在当前状态下,该函数实际上不起作用 - 输出不符合值的字符串,并重复字符串的字母。
我是否以正确的方式解决这个问题?
请告诉我,
布拉德
答案 0 :(得分:4)
使用ord
和chr
更容易:
function shift($string, $distance) {
$distance = $distance % 26;
$string = strtolower($string);
$result = array();
$characters = str_split($string);
if ($distance < 0) {
$distance += 26;
}
foreach ($characters as $idx => $char) {
$result[$idx] = chr(97 + (ord($char) - 97 + $distance) % 26);
}
return join("", $result);
}
答案 1 :(得分:0)