2017-10-11 36 views
-1

我想在PHP中編寫一個函數,以便按照給定的偏移量將字符串轉換爲編碼的函數。PHP自定義編碼功能沒有給出所需的結果

例如: 如果偏移2和輸入是c那麼輸出將是e 同樣如果偏移5和輸入是X則輸出是c

function encode($char,$offset) 
{ 
$char_list = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
$_offset = strpos($char_list,$char) + $offset; 

if($offset > strlen($char_list)){ 
    $_offset = _$offset - $offset; 
} 
return $char_list[$_offset]; 
} 

要求的結果:

encode("a",0) // must returns a 
encode("c",5) // must returns h 
encode("X",9) // must returns g 
+1

而你的問題是......? – Twinfriends

+0

@Twinfriends,修復算法 –

+0

[PHP Caesar cipher]的可能重複(https://stackoverflow.com/questions/21177443/php-caesar-cipher) – Profit

回答

1

計算if中的新偏移量塊不正確,你應該減去字符串的長度,而不是偏移量。但它更好地使用modulo operator

function encode($char,$offset) { 
    $char_list = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
    $_offset = strpos($char_list,$char) + $offset; 
    $_offset = $_offset % strlen($char_list); 
    return $char_list[$_offset]; 
} 
+0

你真是太棒了!非常感謝你 –

+0

你能解釋一下%符號的作用嗎? –

+1

這是[modulo operator](http://php.net/manual/en/language.operators.arithmetic.php),所以無論何時左邊的值大於右邊的值,它都會被減少正確的值,直到它小於右邊的值。否則,它是整數除法後的餘數。 – trincot