PHP:比较2个csv文件中的1列,并将不匹配的行写入一个新文件


PHP: Compare 1 column in 2 csv files and write the unmatching rows to a new file

我有一个产品csv文件,其中包含当前产品的更新和要导入的新产品。我想从更新文件中过滤掉所有现有的产品,因为我需要分别运行导入和更新。我有一个包含所有当前产品的第二个csv。

我想根据sku字段(这是两个文件中的第一个字段)对它们进行比较,并将两个文件中不存在的任何行写入新的csv,这样我就可以运行我的导入,而不必担心覆盖我当前产品中的任何数据。

我是PHP的初学者,所以细节和代码示例绝对赞赏!

我要在这里做一些假设…你必须使解决方案适合你。

我假设csv文件中的第二个字段是在文件与文件之间进行比较时将表明的东西产品被更新了,类似于上次更新的时间戳。

$prodFile = fopen("current-products.csv", "r");
// build a list of all of the sku's in prodFile
$prods = array();
while ($rec = fgetcsv($prodFile)){
    // I am assuming the second field is an updated timestamp
    $prods[$rec[0]] = $rec[1];
}
fclose($prodFile);
$newProdFile = fopen("new-products.csv", "r");
$addFile = fopen("productsToAdd.csv", "w");
$updateFile = fopen("productsToUpdate.csv", "w");
while ($rec = fgetcsv($newProdFile)){
    if (!array_key_exists($rec[0], $prods)){
        fputcsv($addFile, $rec);
    }
    if (array_key_exists($rec[0], $prods) &&
        $prods[$rec[0]] != $rec[1]){
        fputcsv($updateFile, $rec);
    }   
}
fclose($newProductFile);
fclose($addFile);
fclose($updateFile);