我有一个数组数组,我正在尝试将数组插入到csv文件中。
这是我的代码
$file = 'a.csv'; //path to the file on disk
$fp = fopen($file, 'w') or die('Cannot open file: '.$file);
foreach ($column as $fields) {
print ($fields);
fputcsv($fp, $fields);
}
fclose($fp);
数据就是这个
$column = (
(1,2,3), (a,b,c)
)
我想要这样的输出
1,2,3
a,b,c
但我得到这样的输出
1,2,3,a,b,c
答案 0 :(得分:0)
由于fputscsv由新行分隔
fputcsv()将一行(作为字段数组传递)格式化为CSV并将其写入(以换行符终止)到指定的文件句柄。
您的数据输入必须更改以匹配所需的格式
$column = (
(1,2,3) , (a,b,c)
)
修改或操纵代码以获取所需的格式。
$column = array (
array('1', '2', '3', '4'),
array('a', 'b', 'c')
);
有很多方法可以让我进行演示而没有从起始文件中获得实际的a.csv输出,但我猜测explode()可以很好地完成这项任务。这会根据需要将数组列表放在数组中,以使fputscsv正常工作。
$columns[] = explode("),(");
使用数据库输出的一个示例。
$result = $connect->prepare("SELECT type_id, label, type, description FROM content_types WHERE type_id='". $args[0] ."'");
$result->execute();
$data = $result->fetchALL(PDO::FETCH_ASSOC);
$columns[] = $data;
同时查看原始帖子并回答similar question。
答案 1 :(得分:0)
应该可以正常工作。还有一个负责编码的代码。
$filename = ''; // $filename = 'something.csv';
$chosen = array();
/* $chosen = array (
* array('ąąąą', 'źźźź', 'ęeęę', 'óóó'),
* array('łłłłł','żżżż', '1111', '22222')
);*/
$file = fopen($filename, 'w');
foreach ($chosen as $row) {
fputs($file, $bom =( chr(0xEF) . chr(0xBB) . chr(0xBF) ));
fputcsv($file, $row);
}
fclose($file);
输出
ąąąą,źźźź,ęeęę,óóó
łłłłł,żżżż,1111,2222
答案 2 :(得分:0)
你能尝试添加" PHP_EOL"最后一个字段的结尾。
答案 3 :(得分:0)
我最近试图找出如何使用fputcsv获取新行,并发现了这篇文章。我通过使用fwrite添加新行来解决它。
$aKeys = array_keys($aDataKeys);
$rTmpFile = fopen('php://temp', 'rw');
fputcsv($rTmpFile, $aKeys);
foreach ($aData as $aRow ) {
fwrite($rTmpFile,"\r\n"); //<------Add a new line
fputcsv($rTmpFile, $aRow);
}
rewind($rTmpFile);
$sCsv = stream_get_contents($rTmpFile);
fclose($rTmpFile);
答案 4 :(得分:-2)
我认为您缺少添加新行:
print($fielsd."\n") // if the aoutput is console
print($fields."<br/>") // in case of html output