用PHP转信

时间:2011-03-24 17:00:22

标签: php

我正在尝试创建一个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');

在当前状态下,该函数实际上不起作用 - 输出不符合值的字符串,并重复字符串的字母。

我是否以正确的方式解决这个问题?

请告诉我,

布拉德

2 个答案:

答案 0 :(得分:4)

使用ordchr更容易:

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)