2017-10-11 12 views
-1

PHP에서 문자열을 주어진 오프셋에 따라 인코딩 된 형식으로 변환하는 방식으로 함수를 작성하려고합니다.PHP 사용자 정의 인코딩 함수가 필요한 결과를 제공하지 않습니다.

: 오프셋 경우 는 2이며, 입력 오프셋이 5이면 출력 마찬가지로 e 될 것이다 c이고 입력은 출력 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]; 
} 

필수 결과이다 X이다

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