【问题标题】:php - fputcsv, new line is not getting inserted at the end of the linephp - fputcsv,没有在行尾插入新行
【发布时间】:2015-04-15 07:49:23
【问题描述】:

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

【问题讨论】:

  • 您的查询具体是什么?新行未插入输出 csv 文件或浏览器?
  • 新行没有插入到 csv 文件中
  • 会不会有一个“\n”作为换行符,而您的编辑器就是不理解(比如 notepad.exe)?
  • 我用excel打开它
  • 实际上逗号在两行之间

标签: php csv


【解决方案1】:

应该可以正常工作。还有一个代码负责编码。

 $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

【讨论】:

  • 文件未创建
  • 它必须。考虑到文件名变量和数组一样为空。取消注释它们或将您的数据放到当前数据中。
  • 是的,我做到了。我给了文件名,也给了数据
  • 很奇怪。这对我来说可以。可能你做错了什么。
  • 我写了这样的代码 $file_name = "download.csv"; $file = fopen($file_name,"w"); $i = 0; foreach ($column as $fields) { //打印 ($fields); foreach ($fields as $data) { if ($i != 3){ fputs($file,$data.","); $i++; } else { fputs($file,$data."\n"); $i = 0; } } fclose($文件); }
【解决方案2】:

由于 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

【讨论】:

  • 格式已更改。还是一样。我正在使用数组数组
  • 我正在从数据库中读取数据并将结果转换为数组数组。然后我试图将数据写入文件
  • 将需要从数据库中获取结果代码或将实际数组设置为文件。数据库结果可以在数组或对象中。此输出应放置在容器数组中。它不会自动发生。您需要操纵结果以适合。
【解决方案3】:

您能否尝试在最后一个字段的末尾添加“PHP_EOL”。

【讨论】:

    【解决方案4】:

    我最近试图弄清楚如何使用 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);
    

    【讨论】:

      【解决方案5】:

      我认为您只是缺少添加新行:

      print($fielsd."\n") // if the aoutput is console
      print($fields."<br/>") // in case of html output
      

      【讨论】:

      • OP 说 文件中没有换行符
      • 文件中没有新行,但是如果您想在新行上打印每一行,您需要自己添加。
      • 是的,我不争论。但这仍然不能回答问题。
      猜你喜欢
      • 1970-01-01
      • 2019-03-07
      • 1970-01-01
      • 2021-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多