如何通过使用php比较两个文件来找到额外的行?
我有两个文件 第一个有482行。 第二个只有519行 我想通过使用php比较两个文件来找到额外的行 假设我的第一个文件有这样的行如何通过使用php比较两个文件来找到额外的行?,php,file-manipulation,file-comparison,Php,File Manipulation,File Comparison,我有两个文件 第一个有482行。 第二个只有519行 我想通过使用php比较两个文件来找到额外的行 假设我的第一个文件有这样的行 Mango Orange Cherry Apple Blackberry Apple Orange Mango Banana Cherry Blackberry 假设我的第二个文件是这样的 Mango Orange Cherry Apple Blackberry Apple Orange Mango Banana Cherry Blackberry 请
Mango
Orange
Cherry
Apple
Blackberry
Apple
Orange
Mango
Banana
Cherry
Blackberry
假设我的第二个文件是这样的
Mango
Orange
Cherry
Apple
Blackberry
Apple
Orange
Mango
Banana
Cherry
Blackberry
请注意:这些行是随机排列的。现在我想使用一个php脚本删除相同的行并保留多余的行。例如,文件1包含行
Mango
。文件2也包含该行,但顺序是随机的。所以我想删除这一行。通过将每个文件的行读入一个列表来创建两个列表,然后比较它们。浏览列表1并删除列表2中未找到的每个项目,反之亦然。将每个文件加载到字符串数组中(例如使用)
对数组2中的每个项执行一些循环,以确定该项是否存在于数组1中。如果是,请从数组2中删除该项并继续
完成后,数组2将只包含唯一的行
编辑:
如果您只想删除文件2中也存在于文件1中的行,则需要查找唯一值(顺序无关紧要)。一个快速的方法是使用函数
以下是一个例子:
$file1 = array('Mango', 'Orange', 'Cherry', 'Apple', 'Blackberry');
$file2 = array('Apple', 'Orange', 'Mango', 'Banana', 'Cherry', 'Blackberry');
$diff = array_diff($file2, $file1);
var_dump($diff);
// Output
array
3 => string 'Banana' (length=6)
如果您喜欢使用我在第一部分中提到的循环手动执行此操作,下面是您将如何执行此操作:
// Loop over every value in file2
for($i = count($file2) - 1; $i >= 0; $i--)
{
// Compare to every value in file1; if same, unset (remove) it
foreach($file1 as $v)
if ($v == $file2[$i])
{
unset($file2[$i]);
break;
}
}
// Reindex the array to remove gaps
$output = array_values($file2);
var_dump($output);
// Output
array
0 => string 'Banana' (length=6)
我采取了杰尔顿建议的同样方法 此处演示:
有很多代码片段可以做到这一点: (仅限阵列)
检查两个数组是否都包含值。是否需要使用PHP脚本完成此操作?您可以在bash中轻松实现这一点:
cat file1 file2 | sort | uniq > uniques.txt
你好,Alex,我是php初学者。这就是我问这个问题的原因。如果你能给我一些示例代码,我将非常感激。谢谢
// read in both files
$file1 = file($filename1);
$file2 = file($filename2);
// calculate the entries that are in both files
$inBothFiles = array_intersect($file1, $file2);
// filter elements found in both files from file2
$newFile2 = array_diff($file2, $inBothFiles);