你帮了我这么多时间,但现在对这个问题我还没有找到解决方案。 我有两个csv,我必须比较并得到差异。 两个csv看起来像这样:
https://stackoverflow.com
https://google.com
这两个文件大约是10 MB
直到现在我做到了:
array1 = array_map('str_getcsv', file(file1));
array2 = array_map('str_getcsv', file(file2));
$diff = array_diff(array_map('serialize',$array1), array_map('serialize',$array2 ));
只要我拥有无限的记忆,它就会非常好用。
这就是问题;-)我没有无限的记忆,因为服务器与befor不同。
现在的问题是:
如何减少它的memory_usage或如何比较两个文件。 请不要考虑文件大小或类似内容。
我需要文件的真正区别。
就像在一个文件中一样
https://stackoverflow.com
和另一个
https://google.com
所以区别在于: - )
感谢您的帮助
答案 0 :(得分:0)
将file1
读入关联数组的键中。然后逐行阅读file2
,从数组中删除这些条目。
$file1 = array_flip(file("file1.csv", FILE_IGNORE_NEW_LINES));
$fd2 = fopen("file2.csv");
$diff = array();
while ($line = fgets($fd2)) {
$line = str_replace("\n", "", $line); // remove trailing newline
if (!array_key_exists($line, $file1)) {
// line is only in file2, add it to result
$diff[] = $line;
} else {
// line is in both files, remove it from $file1
unset($file1[$line]);
}
}
fclose($fd2);
// Remaining keys in $file1 are unique to that file
$diff += array_keys($file1);
如果将第一个文件读入一个数组,然后翻转它就是太多的内存,你也可以使用fgets()
循环(但是垃圾收集器应该清理由{{1创建的临时数组) }})。