【问题标题】:Array to csv download in PHP数组到 csv 在 PHP 中下载
【发布时间】:2018-10-11 17:39:25
【问题描述】:

我正在尝试将我在 PHP 中的数组转换为 csv 以供下载。

当前数组看起来像这样

Array[0] = "Name,age,ID"
Array[1] = "Alex,26,1"
Array[2] = "Ryan,12,2"
Array[3] = "Steph,56,7"

我不确定如何将此下载作为 csv,其中每个数组位置是它自己的行显然是 csv。

我将标题设置为以下内容:

header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=file.csv");

然后我尝试回显数组的每个元素,希望这能奏效。如下:

header("Content-type: text/csv");
 header("Content-Disposition: attachment; filename=file.csv");
foreach ($lines as &$line) {
   echo $line;
}

$lines 是我的数组。

但是它在 csv 中完成了所有一行。有没有办法让这个数组在 csv 中正确打印?

【问题讨论】:

  • @PatrickQ 完成,只是一个基本的回声,认为不需要。
  • echo "$line\n";
  • echo 不会在您的内容末尾自动添加换行符。你必须明确地这样做。

标签: php arrays csv download


【解决方案1】:

你必须添加一个换行符

echo $line . "\n";

更好

echo $line . PHP_EOL; //constant for correct line-ending depending on OS.

【讨论】:

  • 使用PHP_EOL 跨平台换行:echo $line, PHP_EOL;
  • 天哪,我很笨。在用 PHP 编码近 2 年后想想,我会明白这一点。当它允许我时,我会接受答案。
【解决方案2】:

解决方案之一是fputcsv 函数。

header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=file.csv");
$output = fopen('php://output', 'w');
foreach ($lines as $line) {
    $row = explode(',', $line);
    fputcsv($output, $row);
}
fclose($output);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-18
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    • 2012-10-17
    • 2011-12-05
    • 2014-12-29
    相关资源
    最近更新 更多