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

时间:2013-05-10 16:40:19

标签: php magento-1.5

我有一个产品csv文件,其中包含当前产品的更新和要导入的新产品。我想从更新文件中筛选出所有现有产品,因为我需要单独运行导入和更新。我有第二个csv与所有当前产品。

我想基于sku字段比较它们,这是两个文件中的第一个字段,并将两个文件中不存在的任何行写入新的csv,这样我就可以运行我的导入而不用担心过度写入我当前产品中的任何数据。

我有点像PHP的初学者,所以特别感谢细节和代码示例!

1 个答案:

答案 0 :(得分:1)

我将在这里做出一些假设......你必须让解决方案适合你。

我假设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);