分解csv文件并重新创建阵列

时间:2011-09-29 05:30:12

标签: php arrays csv

我不需要你做我的工作,只需指出我正确的方向。我是php的新手,我想我可以搞清楚,我只需要指出正确的方向。

我有一个包含商家信息的csv文件(公司,地址,城市,电子邮件等)

某些记录在电子邮件字段中有多个电子邮件地址。每个值用分号(;),

分隔

我想要做的是每行有一个电子邮件记录。如果原始行中有3个电子邮件地址,那么当我完成时,我需要3行,每行包含一个电子邮件地址。

大多数记录只有一个电子邮件地址,但有些记录中有多达12个电子邮件地址。

我知道这里有数据常规问题,但我正在构建一个转换实用程序来提供另一个应用程序。

同样,我不是在寻找最终的代码,虽然我不会拒绝它;),我只是想指向正确的方向。

感谢您的帮助......杰夫

2 个答案:

答案 0 :(得分:3)

首先,使用fgetcsv()来读取文件。这将自动地删除行和列:

while (($data = fgetcsv($handle, 1000, ","))) {
    // do something
}

你必须知道哪个字段是电子邮件字段(根据你的列表应该是字段3(3不是4因为$data是一个从零开始的数组))。使用explode()拆分邮件地址:

$emails = explode(";", $data[3]);

之后,你只需要嵌套循环:

while (($data = fgetcsv($handle, 1000, ","))) {
    $company = $data[0];
    $address = $data[1];
    $city = $data[2];
    $emails = explode(" ", $data[3]);
    foreach($emails as $email){
        // do something with $company, $address, $email...
    }
}

答案 1 :(得分:1)

这是一个提示。你有这样的CSV(公司,地址,城市,电子邮件等)。你说你有多个电子邮件由不同的字符,分号分隔。然后你可以认为字段地址是一个“分号”分隔值(一个CSV,但使用的是;而不是a),就像这封电子邮件=(email1; email2; email3;等等)

告诉我你是否需要更多帮助