2012-05-28 139 views
2

我需要将数据数组保存到CSV文件。问题如下:当我打开CSV文件时,我发现数组的第0行与头部保存在同一行。还有一个标题的最后一列包含0,即'www0'。如何避免这种情况?将数据数组保存到CSV文件

 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); 
} 
+0

这是什么地方,其中一个简单的'foreach'会比'array_walk()'更好,特别是如果你不使用匿名函数,因为到'saveCSV第二个电话()'会造成致命错误沿''无法重新声明函数__outputCSV(),已经在...声明'的行。当您从现在开始回到代码并更高效时,“foreach”会更短,更容易理解。 – DaveRandom

回答

1

您需要在标题后添加一个换行符。请注意从单引号改为双引号以启用转义。

$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); 
+0

你的第二个解决方案适合我。最后一个不起作用,我不知道为什么 - 它在第一行写入Array0。 –

+0

@KlausosKlausos - 尝试最后一个版本时,是否将'fwrite'更改为'fputcsv'? –

+0

哦,就是这样。 –