首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在PHP比较2 csv中,如果有匹配,则从1 csv中添加数据,然后写入新的csv

在PHP比较2 csv中,如果有匹配,则从1 csv中添加数据,然后写入新的csv
EN

Stack Overflow用户
提问于 2016-04-18 16:01:13
回答 1查看 1.4K关注 0票数 0

我需要比较两个csv文件。一个新的,我每天得到新的产品和第二个,其中包含所有的产品库存。我有工具,如果有相同的产品在两个文件通过比较的sku。第一个csv与新产品可能有相同的sku数倍。因此,如果有匹配,我需要在新列中将来自第二个csv的Prod.ID添加到第一个csv的sku中。

第一个csv是这样的:

代码语言:javascript
运行
复制
ID      SKU         Cat         Price
0       12345678    Clothes     10.00
0       12345678    Clothes     10.00
0       87654321    Bath        5.00

第二个文件如下所示

代码语言:javascript
运行
复制
ID     SKU         Cat         Price
321    12345678    Clothes     10.00
532    87654321    Bath        5.00

因此,我需要将第二个csv中的ID添加到第一个csv中的每个匹配SKU中,并将其保存到一个非常新的csv中,以便最终获得ist,如下所示:

代码语言:javascript
运行
复制
ID      SKU         Cat         Price
321     12345678    Clothes     10.00
321     12345678    Clothes     10.00
532     87654321    Bath        5.00

现在我有以下代码,但我只得到一个空的updated.csv。我完全卡住了:

代码语言:javascript
运行
复制
$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"));
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-18 19:50:04

1.csv - $result

代码语言:javascript
运行
复制
ID      SKU         Cat         Price
0       12345678    Clothes     10.00
0       12345678    Clothes     10.00
0       87654321    Bath        5.00

2.csv - $source

代码语言:javascript
运行
复制
ID     SKU         Cat         Price
321    12345678    Clothes     10.00
532    87654321    Bath        5.00

代码语言:javascript
运行
复制
<?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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36698963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档