PHP fgetcsv() delimiter


PHP fgetcsv() delimiter

关于fgetcsv()文档,fgetcsv()函数中有一些参数:句柄、长度、分隔符、封闭符和转义符。

现在,我有两个问题:

  1. 外壳到底做什么
  2. 我有一个csv文件,每行5列。想象一下这样:1,2,3,4,5

所以索引是从0到4。但每当我想从索引4中获取日期时,就会返回一个空值。除非我在它后面加一个逗号(通过在它后面多填充一列,使内容如下:1,2,3,4,5,6)。我该如何解决这个问题?似乎有一些问题,因为csv文件每行最后一项后面缺少逗号!

;1.enclosure参数是封装特定字段或"索引"的数据的字符。默认情况下,参数为",这意味着您可以将字符串"括"在"字符中。

示例:

1,2,"this is three",4


 2.根据评论,您正在呼叫fgetcsv($handle, 10000, ',')。也许,你正在阅读的行可能超过10000个字符。尝试将长度更改为0,这将是"无限制的",看看这是否有帮助。另一种解决方案是尝试将列的值用双引号括起来。

Enclosure是包含字段的字符。这是一种额外的分隔符。

例如,hello,world有一个逗号作为字段分隔符,没有文本定界符,而"hello","world"有一个引号作为文本

"Hello,world","Second Field","Third, and last, field".

其他一些系统只包含包含字段分隔符的值,或包含空格的值,这意味着在这些系统上,未限制的值不一定是数字

如果您有一个"琐碎"的情况-未限制的值,值内没有转义字段分隔符(即没有"a,firstpartB'',secondpartB,C'之类的东西)-您可能会完全跳过CSV转换并运行

  $line = fgets($file, MAX_EXPECTED_LINE_LEN);
  // This splits '  A, B, C ' into 'A', ' B' and ' C' (note spaces)
  $row = explode(',', trim($line)); // other delimiters can be used

  // Consider "  , ", "," and ", " as the same delimiter
  // i.e. ' Alpha , Beta   ,    Gamma  ' gets split into 'Alpha', 'Beta' and 'Gamma'
  $row = preg_split('#''s*,''s*#', trim($line));

我似乎无法重现你正在经历的问题;它是否与行结尾的不同编码有关(即CRLF而不是LF)?

在必要的情况下,您可以将fgetcsv划分为两个组件fgetsstr_getcsv(),从而操纵调用之间的行(使用trim,或者如果情况更糟,则通过添加缺失的逗号)。

它对我来说是这样的:

while ($row = $stmt -> fecht()){
     echo "'"";
     echo $row['email'];
     echo "'"";
     // Export every row to a file
     $arr = array(',');
     fputcsv($data, $arr, ";", '"' );
}