2011-03-24 68 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