2011-09-29 60 views
2

我不需要你做我的工作,只需指向正确的方向即可。我是新来的PHP,我想我可以弄明白,我只需要指出正确的方向就可以了。分手csv文件并重新创建阵列

我有业务信息(公司名称,地址,城市,电子邮件等)

一些记录有在电子邮件领域的多个电子邮件地址的CSV文件。每个值用分号(;)分隔,

我想要做的是以每行有一个电子邮件记录结束。如果原始行中有3个电子邮件地址,则完成后我需要3行每个电子邮件地址。

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

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

再一次,我不在寻找最终的代码,但我不会拒绝它;),我只是希望指出正确的方向。

感谢您的帮助...杰夫

回答

1

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

告诉我如果您需要更多帮助

3

起初,请使用fgetcsv()来读取文件。这WIL aotomatically PLIT行和列:

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... 
    } 
} 
+0

正如我的理解是,在CSV文件中的行会是这样的companyName ,address,city,email1; email2如果是这种情况,那么第一个explode()函数中的第一个参数应该是“;” –

+0

谢谢!很快得到它。像梦一样工作。 – user969841

+0

@ tomtheman5:谢谢你的提示,那只是一个错字,现在已经被纠正了。 – oezi