【问题标题】:keep line breaks of csv datas保留 csv 数据的换行符
【发布时间】:2020-10-05 16:09:39
【问题描述】:

我正在使用 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;
   }

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

【问题讨论】:

  • 你应该enable warnings。然后您会在$a = array_combine($csv[0], $a); 行看到一条警告,其文本为:“警告:array_combine():两个参数应具有相同数量的元素”
  • 感谢您的回复。我做到了,我收到了这条信息。当我删除 csv 中的换行符时,一切正常,没有错误消息。但我需要保留这些换行符。

标签: php csv fgetcsv


【解决方案1】:

不要使用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);
}

【讨论】:

    猜你喜欢
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 2018-05-10
    • 2014-10-17
    • 1970-01-01
    • 2017-05-19
    • 2011-07-06
    • 2017-05-17
    相关资源
    最近更新 更多