Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过使用php比较两个文件来找到额外的行?_Php_File Manipulation_File Comparison - Fatal编程技术网

如何通过使用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 请

我有两个文件

第一个有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

请注意:这些行是随机排列的。现在我想使用一个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);