保留 csv 数据的换行符

keep line breaks of csv datas

我正在使用 kirby cms 和一些 php 从 csv 文件的数据生成文本文件。

在我的 csv 文件的数据中,有几段文本换行符。 我需要将这些换行符保留在生成的文本文件中。

这是代码

<?php
  function csv(string $file, string $delimiter = ','): array{
    $lines = file($file);

    $lines[0] = str_replace("\xEF\xBB\xBF", '', $lines[0]);

    $csv = array_map(function($d) use($delimiter) {
     return str_getcsv($d, $delimiter);
    }, $lines);

    array_walk($csv, function(&$a) use ($csv) {
     $a = array_combine($csv[0], $a);
    });

    array_shift($csv);

    return $csv;
   }

我正在尝试弄清楚如何将这些换行符保留在文本文件中。 谢谢 !

不要使用 file(),因为它不知道某些换行符在 CSV 记录内部,不应该用于拆分数据。

使用带有 fgetcsv() 的循环,它会正确解析文件,假设正确引用了带有换行符的字段。

$fh = fopen($file);
$header_line = fgets($fh);
$header_line = str_replace("\xEF\xBB\xBF", '', $header_line);
$keys = str_getcsv($header_line);
$csv = [];

while ($row = fgetcsv($fh, $delimiter)) {
    $csv[] = array_combine($keys, $row);
}