将数组结果写入csv文件的问题

时间:2011-09-28 20:08:50

标签: php arrays fwrite

我有一个需要清理的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);
        }
    }
    ?>

2 个答案:

答案 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