【问题标题】:Write to CSV with PHP function fputcsv使用 PHP 函数 fputcsv 写入 CSV
【发布时间】:2020-10-06 06:59:13
【问题描述】:

我正在使用 fputcsv 从 MySQL 结果写入 CSV:

$list = array("group, variable, value \r\n");

while ($row = mysqli_fetch_assoc($result)) {
  array_push($list, $row['strand_pk'] . ',' . $row['unit_name']. "\r\n");
}

$fp = fopen('../reports/data.csv', 'w');

fputcsv($fp, $list);

fclose($fp);

在浏览器页面上打印的数组如下所示:

Array
(
    [0] => group, variable, value 

    [1] => 1,Integrated Medical Systems 1

    [2] => 1,Integrated Medical Systems 2

    [3] => 1,Integrated Medical Practice 1
    
    ...
)

带有输出的 CSV 如下所示:

"group, variable, value 
","1,Integrated Medical Systems 1
","1,Integrated Medical Systems 2
","1,Integrated Medical Practice 1
..."

我需要的是 CSV 的样子:

group,variable,value
1,IMP 3,40
1,IMP 2,8
1,IMP 1,54
1,IMS 2,10

我在这里做错了什么?

【问题讨论】:

  • fputcsv一行 写入 CSV,您正在尝试使用它一次写入整个多行数组。你的“行”数据实际上并不是一个数组,而是一串逗号分隔的值。

标签: php fputcsv


【解决方案1】:

fputcsv 需要正确的一维数组(不是逗号分隔的字符串)。

您的代码应如下所示:

$list = ['group', 'variable', 'value'];

while ($row = mysqli_fetch_assoc($result)) {
   $list[] = [$row['strand_pk'], $row['unit_name']];  // you're missing a value here though
}

然后你需要在写入文件之前遍历数组:

foreach ($list as $row) {
  fputcsv($fp, $row);
}

请注意,如果您只需要使用它创建 CSV,则可能根本不需要构建 $list。然后在while 循环中直接使用fputcsv

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多