0

現在の製品の更新とインポートする新しい製品の両方を含む製品 csv ファイルがあります。インポートと更新を別々に実行する必要があるため、既存のすべての製品を更新ファイルから除外したいと考えています。現在のすべての製品を含む 2 番目の csv があります。

両方のファイルの最初のフィールドである sku フィールドに基づいてそれらを比較し、両方のファイルに存在しない行を新しい csv に書き込んで、データの上書きを心配せずにインポートを実行できるようにしたいと思います。私の現在の製品。

私はPHPの初心者なので、詳細とコード例は間違いなく高く評価されています!

4

1 に答える 1

1

ここでいくつかの仮定を立てます... ソリューションを自分に合ったものにする必要があります。

csv ファイルの 2 番目のフィールドは、ファイルを比較したときに製品が更新されたことを示すものであり、最終更新のタイムスタンプのようなものであると想定しています。

$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);     
于 2013-05-10T16:59:29.133 に答える