我有一个产品 csv 文件,其中包含对当前产品的更新和要导入的新产品。我想从更新文件中过滤掉所有现有产品,因为我需要分别运行导入和更新。我有一个包含所有当前产品的第二个 csv。
我想根据 sku 字段比较它们,这是两个文件中的第一个字段,并将两个文件中不存在的任何行写入新的 csv,这样我就可以运行我的导入,而不必担心在其中覆盖任何数据我目前的产品。
我在某种程度上是 PHP 的初学者,因此非常感谢您的详细信息和代码示例!
我有一个产品 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);