我有一个产品csv文件,其中包含当前产品和要导入的新产品的更新。我想从更新文件中过滤掉所有现有产品,因为我需要分别运行导入和更新。我有第二个csv与所有目前的产品。PHP:比较2 csv文件中的1列并将不匹配的行写入新文件
我想比较它们基于两个文件中第一个字段的sku字段,并将两个文件中不存在的任何行写入新的csv,这样我就可以运行我的导入而不用担心过度写入,在我目前的产品中写入任何数据。
我是一个初学PHP的人,所以具体和代码示例肯定是赞赏!
我有一个产品csv文件,其中包含当前产品和要导入的新产品的更新。我想从更新文件中过滤掉所有现有产品,因为我需要分别运行导入和更新。我有第二个csv与所有目前的产品。PHP:比较2 csv文件中的1列并将不匹配的行写入新文件
我想比较它们基于两个文件中第一个字段的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);
谢谢,这看起来非常接近我所需要的。 – Lori 2013-05-13 21:32:57
我不知道你在这里要求什么......你已经尝试了什么?你得到的错误是什么? – 2013-05-10 16:45:23