簡體   English   中英

PHP按行比較兩個文本文件

[英]PHP compare two text files by lines

我需要比較兩種語言文件 - 英語和德語。 每個文本文件每行有一個單詞/短語。 第一語言中的單詞/短語[x]是第二語言中的單詞/短語[x]。 翻譯的單詞在第二個文件中位於同一行。

我嘗試使用以下代碼進行翻譯,但似乎循環不起作用。 我總是得到“沒有”。 有任何想法嗎?

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;                                                         
}                   

if聲明,我認為你的問題是錯誤的。 關鍵是stripos (如strpos )可以返回0false

例如,如果您在單詞'cats'中搜索'cat',條stripos將返回0 ,因為它是cat-string的第一個位置。 另一方面,如果你在一個單詞'cats'中搜索'dog',條stripos將會返回false,因為沒有找到任何東西。

所以在你的函數中, if case應該更嚴格:

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

這意味着即使從第0位開始,也會找到您的單詞。您當前的if語句不允許接受0 (零)值。

在測試代​​碼后,我發現了兩個不同的問題。

首先,要小心條紋 該函數返回0 ,如果$needle在開始時(即位置0)發現,和false如果$needle沒有被發現。 在PHP中,默認情況下0為eval'd為false 您應該將if語句更改為:

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

注意!==運算符,它比!=更強。

阻止您的函數工作的第二個也是最重要的問題是您比較可能包含不可見字符的 (例如“ 換行符 ”字符)。 你應該在比較之前修剪字符串。 我要更改你的if語句:

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

這更簡單。 或者,如果你真的想保留stripos

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM