php - fputcsv,新行没有插入到行尾

时间:2015-04-15 07:49:23

标签: php csv

我有一个数组数组,我正在尝试将数组插入到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

5 个答案:

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