在 PHP 中比较 2 个 csv,如果匹配则添加 1 个 csv 中的数据并写入新的 csv
In PHP compare 2 csv, add data from 1 csv if there are matches and write to new csv
我需要比较两个 csv 文件。我每天都会收到一个新产品,第二个包含所有库存产品。
通过比较 sku,如果两个文件中有相同的产品,我有工具。新产品的第一个 csv 可能有多次相同的 sku。因此,如果存在匹配项,我需要将第二个 csv 中的 Prod.ID 添加到新列中第一个 csv 中的 sku。
这是第一个 csv 的样子:
ID SKU Cat Price
0 12345678 Clothes 10.00
0 12345678 Clothes 10.00
0 87654321 Bath 5.00
第二个文件看起来像这样
ID SKU Cat Price
321 12345678 Clothes 10.00
532 87654321 Bath 5.00
所以我需要将第二个 csv 中的 ID 添加到第一个 csv 中每个匹配的 SKU,并将其保存到一个非常新的 csv 中,最终得到 ist,如下所示:
ID SKU Cat Price
321 12345678 Clothes 10.00
321 12345678 Clothes 10.00
532 87654321 Bath 5.00
现在我有以下代码,但我只得到一个空 updated.csv。我完全卡住了:(
$fp = fopen('updated.csv', 'w');
$csvFile1 = "firts-file.csv";
$handle1 = fopen($csvFile1, "r");
$csvFile2 = "second-file.csv";
$handle2 = fopen($csvFile2, "r");
while(($data1 = fgetcsv($handle, 20000, ";")) && ($data2 = fgetcsv($handle2, 20000, ";" ))) {
$oldID = $data1[0];
$newID = $data2[0];
if(($data1[1]) == ($data2[1])) {
fputs($fp, str_replace($oldID, $newID, "\n"));
}
}
1.csv - $结果
ID SKU Cat Price
0 12345678 Clothes 10.00
0 12345678 Clothes 10.00
0 87654321 Bath 5.00
2.csv - $source
ID SKU Cat Price
321 12345678 Clothes 10.00
532 87654321 Bath 5.00
代码
<?php
$csvHandleOne = fopen('1.csv', "r");
$source = $result = array();
while($data = fgetcsv($csvHandleOne, 2048, ";")) {
$result[] = $data;
}
fclose($csvHandleOne);
$csvHandleTwo = fopen('2.csv', "r");
while($data = fgetcsv($csvHandleTwo, 2048, ";")) {
//We are interested only in SKU and ID link
$source[$data[1]] = $data[0];
}
fclose($csvHandleTwo);
$csvHandleResult = fopen('result.csv', "w");
foreach ($result as $key => $value) {
if($key && isset($source[$value[1]])) {
//SKU => ID link found in source. Set id to $result
$value[0] = $source[$value[1]];
}
fputcsv($csvHandleResult, $value, ';');
}
fclose($csvHandleResult);
我需要比较两个 csv 文件。我每天都会收到一个新产品,第二个包含所有库存产品。 通过比较 sku,如果两个文件中有相同的产品,我有工具。新产品的第一个 csv 可能有多次相同的 sku。因此,如果存在匹配项,我需要将第二个 csv 中的 Prod.ID 添加到新列中第一个 csv 中的 sku。
这是第一个 csv 的样子:
ID SKU Cat Price
0 12345678 Clothes 10.00
0 12345678 Clothes 10.00
0 87654321 Bath 5.00
第二个文件看起来像这样
ID SKU Cat Price
321 12345678 Clothes 10.00
532 87654321 Bath 5.00
所以我需要将第二个 csv 中的 ID 添加到第一个 csv 中每个匹配的 SKU,并将其保存到一个非常新的 csv 中,最终得到 ist,如下所示:
ID SKU Cat Price
321 12345678 Clothes 10.00
321 12345678 Clothes 10.00
532 87654321 Bath 5.00
现在我有以下代码,但我只得到一个空 updated.csv。我完全卡住了:(
$fp = fopen('updated.csv', 'w');
$csvFile1 = "firts-file.csv";
$handle1 = fopen($csvFile1, "r");
$csvFile2 = "second-file.csv";
$handle2 = fopen($csvFile2, "r");
while(($data1 = fgetcsv($handle, 20000, ";")) && ($data2 = fgetcsv($handle2, 20000, ";" ))) {
$oldID = $data1[0];
$newID = $data2[0];
if(($data1[1]) == ($data2[1])) {
fputs($fp, str_replace($oldID, $newID, "\n"));
}
}
1.csv - $结果
ID SKU Cat Price
0 12345678 Clothes 10.00
0 12345678 Clothes 10.00
0 87654321 Bath 5.00
2.csv - $source
ID SKU Cat Price
321 12345678 Clothes 10.00
532 87654321 Bath 5.00
代码
<?php
$csvHandleOne = fopen('1.csv', "r");
$source = $result = array();
while($data = fgetcsv($csvHandleOne, 2048, ";")) {
$result[] = $data;
}
fclose($csvHandleOne);
$csvHandleTwo = fopen('2.csv', "r");
while($data = fgetcsv($csvHandleTwo, 2048, ";")) {
//We are interested only in SKU and ID link
$source[$data[1]] = $data[0];
}
fclose($csvHandleTwo);
$csvHandleResult = fopen('result.csv', "w");
foreach ($result as $key => $value) {
if($key && isset($source[$value[1]])) {
//SKU => ID link found in source. Set id to $result
$value[0] = $source[$value[1]];
}
fputcsv($csvHandleResult, $value, ';');
}
fclose($csvHandleResult);