2011-09-20 169 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了。)

话虽这么说,你的代码很简单,易于遵循,所以可能是最好的方法。

相关问题