2011-09-20 168 views
1

基本上我有兩個字符串文件用新行分隔。如何將字符串與PHP中的字符串列表進行比較?

我想要做的是從第一個文件中獲取第一個字符串,並將其與第二個文件中的所有字符串進行比較。然後從第一個文件中獲取第二個字符串,並將其與第二個文件中的所有字符串進行比較,然後獲得第三個等等。

目前我有這段代碼,但我不確定它是否正在工作因爲我希望它是

$file = file_get_contents("file1.txt"); 
$pieces = explode("\n", trim($file)); 
foreach($pieces as $piece) 
{ 
    $file2 = file_get_contents("file2.txt"); 
    $pieces2 = explode("\n", trim($file2)); 
    foreach($pieces2 as $piece2) 
    { 
     if($piece == $piece2) 
     echo 'yes'; 
    } 
} 
+0

你究竟想在這裏完成什麼?只是爲了確定file1中的行是否也存在於file2中? – animuson

+0

基本上,是的。 – dikidera

+1

我不知道PHP,但由於'file2.txt'是不變的,爲什麼不把它移出'foreach'循環?沒有理由每次檢查一個新文件時打開/解析它,因爲一次就足夠了,不是嗎?另外,這裏有什麼問題?你測試過你的代碼嗎? – BlackJack

回答

2

那麼有一個更有效的方式來實現這一點。使用array_intersect你可以找到這兩個文件之間的共同線。

$a = file('file1.txt'); 
$b = file('file2.txt'); 
$c = array_intersect($a, $b); 

$c數組中找到兩個文件之間共有的行。但請注意交叉路口區分大小寫。

+0

這會做我需要的嗎?我需要的不是僅僅比較兩個文件,如果它們相同,我需要比較第一個字符串(等等)和第二個文件中的所有字符串。 – dikidera

+0

不錯的答案 - 我會在與地圖混合前使用它。 – Louis

+0

我認爲在這種情況下,他可以使用array_intersect_uassoc()函數將數組與回調函數進行比較 –

0

您的代碼工作正常,如果你正在尋找一個更優雅的方式,我要麼提出一個bash腳本或者看array_map功能(可能還有其他的像array_walk,array_filter了。)

話雖這麼說,你的代碼很簡單,易於遵循,所以可能是最好的方法。

相關問題