1

我想从 PHP 中将两个数组另存为 CSV 文件。问题是此代码仅适用于第一个呼叫。例如,在下面给出的示例中,我只能保存array1,但array2不能保存。如果我交换 和 的位置array1array2那么array2将被保存而不是array1。我的代码实际上有什么问题,我该如何解决这个问题?

     header("Content-type: text/csv");
     header("Pragma: no-cache");
     $headers = array('xxx','yyy','zzz');
     saveCSV($array1,"file1.csv",$headers);

     header("Content-type: text/csv");
     header("Pragma: no-cache");
     $headers = array('aaa','bbb','ccc');   
     saveCSV($array2,"file2.csv",$headers);

function saveCSV($data,$fileName,$headers) {
    $outstream = fopen($fileName, "a");
    file_put_contents($fileName, "");

    if ($headers != 0)
        fputcsv($outstream,$headers);

    function __outputCSV(&$vals, $key, $filehandler) {
        fputcsv($filehandler, $vals);
    }
    array_walk($data, "__outputCSV", $outstream);
    fclose($outstream);
}
4

2 回答 2

0

据我所知,您只能设置一次标题然后返回内容。上面的代码设置了一些标头,使用 CSV 回复,然后再次设置标头,并再次使用不同的 CSV 回复。PHP/浏览器不会处理单独的返回。

而不是从服务器推送多英里,也许您可​​以只使用浏览器 window.open() /path-to-get-csv-script.php?op=file1 然后 op=file2。如果这是您想要的,浏览器可以打开这两个文件....

于 2012-05-30T16:48:44.837 回答
0

您设置标题两次。

尝试建立您的 csv 数据输出,然后一旦完成设置标题一次。

此外,您在另一个中有一个函数声明,我确定这是无效的。

将 __outputCSV 移到其他地方,或者您可能打算将其关闭?

于 2012-05-30T16:50:36.277 回答