2013-05-10 88 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

相關問題