我有一个需要清理的csv文件。它包含13个字段,但我只需要7个(业务,地址,城市,St,Zip,电话,电子邮件)
我需要遍历所有记录,并使用电子邮件地址创建仅包含记录的新输出。
简而言之......我加载原始文件,运行for循环,爆炸结果,然后查找$ tmp [10]索引不为空的记录。然后,我获得剩余的所有必填字段,并执行foreach循环并将结果写入新的csv文件。
根据我调整代码的方式,我得到...... 仅包含电子邮件地址的文本文件。 要么 仅包含电子邮件地址的最后一条记录的文本文件。
我一直在研究这个问题太久了,我只需要一双新的眼睛来指出这个问题。我是php新手,想要做这个工作。先谢谢你。
<?php
// See if file exists and is readable
$file = 'uploads/AK_Accountants.csv';
$newfile = basename($file,".csv");
$newfile = $newfile.Date("Ymd").".csw";
$fileNew = fopen('uploads/AK_'.Date("Ymd").'.csv','w+');
// Read the file into an array called $sourcefile
$sourcefile = file($file);
// Loop through the array and process each line
for ($i = 0; $i < count($sourcefile); $i++) {
// Separate each element and store in a temp array
$tmp = explode('","', $sourcefile[$i]);
// Assign each element of the temp array to a named array key
if ($tmp[10] != "") {
$sourcefile[$i] = array('Business_Name' => $tmp[1], 'Address' => $tmp[3], 'City' => $tmp[4], 'State' => $tmp[5], 'Zip' => $tmp[6], 'Phone' => $tmp[7], 'Email' => $tmp[10]);
foreach($sourcefile[$i] as $key => $value);
fwrite($fileNew, $value);
}
}
?>
答案 0 :(得分:3)
快速浏览一下:
foreach($sourcefile[$i] as $key => $value);
fwrite($fileNew, $value);
应该是
foreach($sourcefile[$i] as $key => $value){
fwrite($fileNew, $value);
}
另外,你有
$newfile = $newfile.Date("Ymd").".csw";
而不是我认为应该是
$newfile = $newfile.Date("Ymd").".csv";
答案 1 :(得分:0)
你的最后一个foreach声明以';'结束并且没有代码块。一旦foreach语句完成迭代,您将获得写入文件的最后一个值,即只是电子邮件地址。
你目前有
foreach (... ) ;
fwrite(...);.
但你可能意味着
foreach( ... ) {
fwrite(...) ;
}
去过那里,做过那个:)
HTH