我有一個產品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