2015-02-04 3 views
2

영어와 독일어의 두 가지 언어 파일을 비교해야합니다. 각 텍스트 파일에는 한 줄에 하나의 단어/문구가 있습니다. 제 1 언어의 단어/구문 [x]은 제 2 언어의 단어/구문 [x]입니다. 번역 된 단어는 두 번째 파일에서 같은 줄에 있습니다.PHP는 두 개의 텍스트 파일을 줄별로 비교합니다.

다음 코드를 사용하여 번역을 시도했지만 루프가 작동하지 않는 것으로 보입니다. 나는 항상 "none"을 얻는다. 어떤 아이디어?

function translation($word,$service,$sprache1,$sprache2){ 
$typus ="transl"; 
$mypath = "data/".$service."/"; 

mkdir($mypath,0777,TRUE); 

//fh - First language file 
$myFile = $mypath."".$typus."-".$sprache1.".txt"; 
$fh = file($myFile) or die("can't open file"); 

//fh2 - Second language file 

$myFile2 = $mypath."".$typus."-".$sprache2.".txt"; 
$fh2 = file($myFile2) or die("can't open file"); 


$x=0; 
$result = "none"; 
foreach ($fh as $line) { 


     if (stripos($word,$line)) 
     {$result = $fh2[$x]; 
     break; 
     } 

$x=$x+1; 

      } 

return $result;               
}     
+0

'$ result'는 항상 "none"입니까? – rapvelopment

+0

예,이 함수는 루프 앞에 정의 된 값을 반환합니다. –

+3

'stripos'는 ** 0 **과 ** false ** 모두를 반환 할 수 있다는 것을 알고 있습니까? 그것들은 다른 의미를 가지고 있습니까? –

답변

3

내 생각에 문제가 있다고 생각합니다. if. 요점은 stripos (예 : strpos)은 또는 거짓을 반환 할 수 있다는 것입니다.

예를 들어 'cats'단어에서 'cat'을 검색하는 경우 stripos은 을 반환합니다. cat-string의 첫 번째 위치이기 때문에. 다른 말로하면 '고양이'라는 단어에서 '개'를 검색하면 stripos거짓을 반환합니다. 아무 것도 발견되지 않았으므로으로 반환됩니다. 그래서 당신의

if 경우 더 엄격해야한다 기능 :

if (stripos($word,$line) !== false) 

이이 단어는 당신은 현재 if 문이 허용하지 않는 위치 0 에서 시작하는 경우에도 발견된다는 것을 의미한다 0 (0) 값을 받아들입니다.

+0

이전 답변 $ fh = file ($ myFile, FILE_IGNORE_NEW_LINES)이 문제를 해결했습니다. 정말 고맙습니다! 또한 "if"케이스를 수정했는지 확인하십시오. 그런 다음 함수가 일부 단어를 반환하지는 않지만 다른 텍스트 파일 인코딩 인 ANSI 및 UTF-8로 인해 문제가 발생했습니다. 이제는 모두 작동 중입니다! 다시 한번 감사드립니다! –

0

코드를 테스트 한 후에 2 가지 다른 문제점을 발견했습니다.

우선 stripos에주의하십시오. 이 함수는 $needle이 처음 (즉, 위치 0)에 있으면 0을, $needle을 찾지 못하면 false을 반환합니다. PHP에서 0은 기본적으로 false으로 eval'd됩니다. 당신은 당신의 if 문을 변경해야합니다 : 강한 것보다 !=입니다

if(stripos($word, $line) !== false) 

참고 !== 연산자.

두 번째로 중요한 문제는 기능이 작동하지 않도록하는 것으로, 보이지 않는 문자 (예 : "newline"문자)가 포함될 수있는 행을 비교하는 것입니다. 그들을 비교하기 전에 문자열을 다듬어야합니다. 내가 대한 if 문을 변경할 것 : 간단

if(trim($word) === trim($line)) 

. 아니면 정말로 보관하고 싶다면 stripos :

+0

감사합니다. 트림 기능을 사용하겠습니다. –

관련 문제