【问题标题】:CSV file line count not working in PHPCSV 文件行数在 PHP 中不起作用
【发布时间】:2016-12-25 21:33:23
【问题描述】:

我有一个网页需要计算 CSV 文件中的行数,但以下代码不起作用:

$linecount = count(file("sample.csv"));
var_dump($linecount);

当我运行这段代码时,代码返回数字 1,但sample.csv 中有 8 行。有人知道为什么会发生这种情况以及如何解决吗?

【问题讨论】:

  • 致电vardump(file("sample.csv")) 可能会提供一些见解。整个文件是否被读入数组中的第一项?
  • print $linecount 输出什么?
  • @negacao 谢谢,整个文件被读入数组的第一项。
  • “当我运行此代码时,代码返回数字 1” - 你的意思是 int(1),对吗?你在什么平台下运行这个?这个问题不清楚,对于未来的访问者来说。
  • @PhiladelphiaRegionalWeather 你也可以投票吗?提前致谢!

标签: php file csv count


【解决方案1】:

如果 sample.csv 文件是在 mac/linux 中创建的,您可能需要考虑将 auto_detect_line_endings 设置为 ON

From the manual:

auto_detect_line_endings布尔值
开启后,PHP 会检查 fgets() 和 file() 读取的数据是否正在使用
Unix、MS-Dos 或 Macintosh 行结束约定。

另一个选项(如果您不想使用此选项)是读取文件并通过所有换行选项拆分行 (\r\n|\r|\n):

$linecount = count(preg_split("/\r\n|\r|\n/", file_get_contents("sample.csv")));

【讨论】:

  • 为什么不用PHP_EOL 而不是/\r\n|\r|\n/
  • @PedroLobito,主要是因为 PHP_EOL 是特定于平台的。如果您在 Windows 上运行 PHP,但在 mac 上创建了 sample.csv,则该 CSV 文件中的新行将是 \r(这就是导致错误的原因)。
  • auto_detect_line_endings 将“修复”这个问题
  • 是的,auto_detect_line_endings 会做到的。
猜你喜欢
  • 1970-01-01
  • 2011-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-01
  • 2014-04-17
相关资源
最近更新 更多