比较两个CSV文件并突出显示差异


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);