2011-03-24 92 views
0

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

在它的功能真的行不通当前状态 - 输出不适合的字串值,也重复串的字母。

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

请让我知道,

布拉德

+1

一些str_rot13的定制版本的看看 - HTTP ://uk.php.net/manual/en/function.str-rot13.php不需要那些数组就可以做到这一点 – 2011-03-24 17:09:46

回答

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); 
} 
+0

谢谢,但我需要也能够使转变价值为负。 – Brad 2011-03-24 17:12:45

+0

现在支持底片:) – Nick 2011-03-24 17:19:31