2013-05-10 21 views
0

我有一个产品csv文件,其中包含当前产品和要导入的新产品的更新。我想从更新文件中过滤掉所有现有产品,因为我需要分别运行导入和更新。我有第二个csv与所有目前的产品。PHP:比较2 csv文件中的1列并将不匹配的行写入新文件

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

我是一个初学PHP的人,所以具体和代码示例肯定是赞赏!

+0

我不知道你在这里要求什么......你已经尝试了什么?你得到的错误是什么? – 2013-05-10 16:45:23

回答

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);  
+0

谢谢,这看起来非常接近我所需要的。 – Lori 2013-05-13 21:32:57

相关问题