我有两个文件。
第一个有482行。 第二个只有519行。
我想通过使用php比较两个文件来找到额外的行。
假设我的第一个文件有这样的行
Mango
Orange
Cherry
Apple
Blackberry
让我说我的第二个文件看起来像这样
Apple
Orange
Mango
Banana
Cherry
Blackberry
请注意:这些行是随机排列的。现在我想使用PHP脚本删除相同的行并保留额外的行。例如,文件1包含行Mango
。文件2也包含该行,但是以随机顺序排列。所以我想删除那一行。
答案 0 :(得分:4)
将每个文件加载到字符串数组中(例如,使用file_get_contents)。
执行一些循环,对于数组2中的每个项目,确定该项目是否存在于数组1中。如果是,请从数组2中删除该项目并继续。
完成后,数组2将只包含唯一的行。
修改强>
如果您只想删除File2中也存在于File1中的行,那么您正在寻找唯一值(顺序无关紧要)。快速执行此操作的方法是使用array_diff函数。
以下是一个例子:
$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)
答案 1 :(得分:1)
我采用了JYelton建议的相同方法。
在这里演示:http://codepad.org/lCa68G76
<?
$file1 = array(
'Mango',
'Orange',
'Cherry',
'Apple',
'Blackberry'
);
$file2 = array(
'Apple',
'Orange',
'Mango',
'Banana',
'Cherry',
'Blackberry'
);
foreach($file2 as $line)
{
if (!in_array($line, $file1))
{
$output[] = $line;
}
}
var_dump($output);
?>
答案 2 :(得分:0)
通过将每个文件的行读入一个列表来制作两个列表,然后比较它们。浏览list1并删除list2中找不到的所有项目,反之亦然。
答案 3 :(得分:0)
有很多片段可以做到:
http://web.archive.org/web/20080506155528/http://software.zuavra.net/inline-diff/
https://github.com/paulgb/simplediff/blob/5bfe1d2a8f967c7901ace50f04ac2d9308ed3169/simplediff.php(仅限数组)
答案 4 :(得分:0)
<?php
$testOne = 'Apple Orange Carrot Banana';
$testTwo = 'Apple Orange Carrot';
$tTwo = explode(' ', $testTwo);
$tOne = explode(' ', $testOne);
foreach($tOne as $first) {
foreach($tTwo as $second) {
if ($second == $first) {
echo 'Both arrays contain: ' . $second . '</br>';
}
}
}
?>
检查两个数组是否都包含值。
答案 5 :(得分:0)
这是否需要使用PHP脚本完成?你可以很容易地在bash中实现这个目标:
cat file1 file2 | sort | uniq > uniques.txt
答案 6 :(得分:0)
// 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);