Php 将数据数组保存到CSV文件

Php 将数据数组保存到CSV文件,php,arrays,csv,fopen,Php,Arrays,Csv,Fopen,我需要将数据数组保存到CSV文件。问题如下:当我打开CSV文件时,我看到数组的0行保存在与标头相同的行中。标题的最后一列也包含0,即“www0”。如何避免这种情况 header("Content-type: text/csv"); header("Pragma: no-cache"); saveCSV($solutionCSV); function saveCSV($data) { $outstream = fopen("schedule

我需要将数据数组保存到CSV文件。问题如下:当我打开CSV文件时,我看到数组的0行保存在与标头相同的行中。标题的最后一列也包含0,即“www0”。如何避免这种情况

        header("Content-type: text/csv");
        header("Pragma: no-cache");
        saveCSV($solutionCSV);

function saveCSV($data) {
    $outstream = fopen("schedule.csv", "a");

    $headers = 'xxx, yyy, zzz, www';
    fwrite($outstream,$headers);

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

标题后面需要换行符。请注意从单引号到双引号的更改以启用转义

$headers = "xxx, yyy, zzz, www\n";
如果这会使Windows跳闸,请使用
\r\n

$headers = "xxx, yyy, zzz, www\r\n";
或者,您也可以依靠
fputcsv
来编写标题。这可能是最安全的方法,因为它将产生一致的格式

$headers = array('xxx', 'yyy', 'zzz', 'www');
fputcsv($outstream, $headers);

这是一个简单的
foreach
array\u walk()
更好的地方,特别是如果您没有使用匿名函数,因为对
saveCSV()
的第二次调用将导致一个致命的错误,即
无法重新声明函数\uu outputcv(),该函数已在…
中声明。从现在开始一年后,当您回到代码中时,
foreach
将变得更短、更容易理解,而且效率更高。您的第二个解决方案对我来说很好。最后一个不起作用,我不知道为什么-它在第一行写入数组0。@klausklausos-您在尝试最后一个版本时是否将
fwrite
更改为
fputcv