如何区分CSV文件中的数据

时间:2012-04-04 13:16:36

标签: php csv filecompare

我有两个csv文件,两者都有相同的数据结构。

ID - Join_date - Last_Login

我想根据这个例子比较并获得完全匹配的记录号:

  

第一个文件有100条记录,其中20条未包含在第二个文件中。

     

第二个文件有120条记录。

我希望PHP中的脚本能够比较这两个文件并构建两个单独的CSV文件。

我想删除第二个文件中未包含在第一个文件中的所有额外记录 并删除第一个文件中未包含在第二个文件中的所有记录。

由于

2 个答案:

答案 0 :(得分:0)

有一个GNU实用程序comm可以很容易地执行此操作。您可以exec通过php或直接执行此操作。如果您无权访问comm,最简单的方法是将两个文件存储在一个数组中(可能通过file())并使用array_intersect()

答案 1 :(得分:0)

你试试这个有限数量的CSV文件..如果你有一个非常大的CSV我会建议你直接导入MySQL

function csvToArray($csvFile, $full = false) {
    $handle = fopen ( $csvFile, "r" );
    $array = array ();
    while ( ($data = fgetcsv ( $handle )) !== FALSE ) {
        $array [] = ($full === true) ? $data : $data[0]; // Full array or only ID 
    }

    return $array;
}


$file1 = "file1.csv" ;
$file2 = "file2.csv" ;

$fileData1 = csvToArray($file1);
$fileData2 = csvToArray($file2);


var_dump(array_diff($fileData1,$fileData2));
var_dump(array_intersect($fileData1,$fileData2));