我需要区分两个CSV文件,在这种情况下,最新文件file2.csv会用更新版本覆盖具有相同值的行,并删除具有相同数据的行。
file1.csv
GHI, 0, 0
ABC, 12, 1
DEF, 10, 1
file2.csv
ABC, 8, 1
DEF, 10, 1
GHI, 2, 0
最终的CSV应该是这样的:
ABC, 8, 1
GHI, 2, 0
php代码:
<?php
$file1 = file('file1.csv');
$file2 = file('file2.csv');
sort($file1);
sort($file2);
var_dump($file1);
var_dump($file2);
$diff = array_diff($file2, $file1);
var_dump($diff);
?>
返回此
ABC, 8, 1
DEF, 10, 1
GHI, 2, 0
现在我手动将file1.csv更改为:
ABC, 12, 1
DEF, 10, 1
GHI, 0, 0
它按预期返回:
ABC, 8, 1
GHI, 2, 0
当我转储已排序的数组时,似乎sort函数的工作方式就像我手动更改订单时一样返回
ABC, 12, 1
DEF, 10, 1
GHI, 0, 0
但似乎不会产生相同的最终结果。有线索吗?
答案 0 :(得分:1)
file
将文件拆分为多行,但每行仍有其结尾换行符。然而,最后一行却没有。因此,它不等于文件中间的相同行内容。
要解决此问题,您可以在最后一个元素中添加换行符:
$file1[count($file1)-1] .= PHP_EOL;
$file2[count($file2)-1] .= PHP_EOL;
或者你可以将它们从所有行中删除:
array_walk($file1,function(&$a) {$a = trim($a);});
array_walk($file2,function(&$a) {$a = trim($a);});