[英]PHP Comparing two CSV files and highlight the difference
我想比较两个CSV文件并突出显示它发生的差异。 目前我有一个小脚本,可以读取两个CSV文件并将内容打印到浏览器上。 这些文件在列号方面的结构相同,但某些行中的值不同,我想强调这种差异,但不确定从哪里开始:
PHP代码:
<?php
$file = fopen("try.csv","r");
$file2 = fopen("try2.csv", "r");
if(! feof($file)){
while($data = fgetcsv($file))
{
foreach($data as $element){
echo $element.' ';
}
echo '<br />';
}
}
echo '<br />';
echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>New File<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<";
echo '<br />';
if(! feof($file2)){
while($data = fgetcsv($file2))
{
foreach($data as $element2){
echo $element2.' ';
}
echo '<br />';
}
}
fclose($file);
?>
知道变量$element
& $element2
保存CSV内容我怎样才能找到差异....?
fgetcsv
为当前行返回一个数组,所以如果内存不是问题,你可以拉入第一个csv的行并将每一行存储在像$csv_1
这样的数组中,然后将第二行存储为$csv_2
,然后使用array_udiff
来找到不重叠的行。
function row_compare($a, $b)
{
if ($a === $b) {
return 0;
}
return (implode("",$a) < implode("",$b) ) ? -1 : 1;
}
$file1 = new SplFileObject("try.csv");
$file1->setFlags(SplFileObject::READ_CSV);
$file2 = new SplFileObject("try2.csv");
$file2->setFlags(SplFileObject::READ_CSV);
foreach ($file1 as $row) {
$csv_1[] = $row;
}
foreach ($file2 as $row) {
$csv_2[] = $row;
}
$unique_to_csv1 = array_udiff($csv_1, $csv_2, 'row_compare');
$unique_to_csv2 = array_udiff($csv_2, $csv_1, 'row_compare');
$all_unique_rows = array_merge($unique_to_csv1,$unique_to_csv2);
foreach($all_unique_rows as $unique_row) {
foreach($unique_row as $element) {
echo $element . " ";
}
echo '<br />';
}
这段代码花了我一些时间,但现在,它可能是最简单的吗?
$filename="nomes.csv"; //lista completa
$base="track.opened.csv"; //mark if it is on here
$NOWcodes = array();
$file = fopen($base, 'r'); //registred opened
while (($line = fgetcsv($file)) !== FALSE) { array_push($NOWcodes, $line[0]); }
fclose($file);
$file = fopen($filename, 'r'); //all nomes
while (($line = fgetcsv($file)) !== FALSE) {
if(!in_array($line[0],$NOWcodes)){$inscrito='yellow;';}
else{$inscrito='#9999ff;';}
echo '<span style="background-color: '.$inscrito.'" title="'.$line[0].'">'.$line[2].'</span><br>'; }
fclose($file);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.