创建 csv 文件时结果为空

Empty result while creating a csv file

我有一个包含键和值的数组,我想将其作为 csv 格式的附件通过电子邮件发送。我正在尝试的是:

...
$mail->addStringAttachment(create_csv($dataCSV), "test.csv", $encoding = 'base64', $type = "text/csv", $disposition = 'attachment');
...

在此之下,我声明我的 create_csv 函数

function create_csv(array &$array) {
    if (count($array) == 0) {
        return null;
    }
    ob_start();
    $df = fopen("php://output", 'w');
    foreach ($array as $key => $value) {
        fputcsv($df, $key);
        fputcsv($df, $value);
    }
    fclose($df);
    return ob_get_clean();
}

这最终会在我的电子邮件中附加一个没有内容的文件,即使我调试 keyvalue 时它们具有预期的值。

为什么会这样,我该如何解决?

您误用了 fputcsv。该函数的第二个参数是 CSV 中的一行。

如果将循环更改为

foreach ($array as $key => $value) {
    fputcsv($df, [$key, $value]);
} 

附加的 csv 将是一个包含 2 个逗号分隔值的行列表。例如对于 $dataCSV = ['one','two','three'],附件将是

0, one
1, two
2, three