PHP和CSV文件 - 如何检测行末?

6

我有一些数据在XLS文件中,我将它们保存为CSV格式,分隔符是逗号。 接下来,我尝试从这个CSV文件中加载数据:

可能是重复问题:
如何使用PHP从CSV文件中提取数据

$input = explode("\r\n", fread($file, filesize("my_data.csv")));
print_r($input);

输出结果:
Array ( [0] => data from the CSV file)

这是问题所在——数组中始终只有一项,而从CSV文件中输出了所有数据。这是怎么回事?为什么数组中的项数不如CSV文件中的行数?
另外,我已经尝试将"\r\n"改为"\n",但结果没有变化。
我想要做的是,加载CSV文件中的每一行并对其进行处理。 文件示例:
a,b,c,d
e,f,g,h

OUTPUT:

a,b,c,d e,f,g,h


2
使用内置的fgetcsv()函数来读取CSV数据。 - Mark Baker
你为什么不使用http://php.net/manual/en/function.fgetcsv.php?不要试图自己解析CSV数据 - 除了简单的数字列表之外,你将会遇到很多麻烦。 - Michael Berkowski
1
但是,各位,你们如何解决行中的最后一项?因为这个最后一项在末尾有逗号,所以它与第二行的第一项合并了。 - user984621
@user984621: CSV读取已经是一个解决的问题。使用已经编写、测试和调试过的fgetcsv函数,而不要编写自己的代码,这样你就不需要再编写、测试和调试了。 - Andy Lester
大家好,如果这个问题太愚蠢了而你们想要关闭这个问题,我很抱歉。但是我之前已经描述了我遇到的问题,只是我还没有找到解决方法... - user984621
2个回答

4

我建议使用PHP内置的CSV文件读取函数fgetcsv(),而不是自己创建一个函数:http://php.net/manual/zh/function.fgetcsv.php

 if (($handle = fopen($file, "r")) !== FALSE) {
     while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $row = implode (",",$data); //puts back together the row from the csv
        echo $row. "\n"; //assuming you want a visual linebreak on console, add the \n
     }
    fclose($handle);
 }  

我不知道这是一个 Bug 还是什么问题,但当我尝试这个时,所以行中的最后一项没有逗号 - 这给我带来了麻烦...因为我没有得到预期的输出。 - user984621
Ray,请查看一下原帖,如果我使用这段代码,会得到以下输出——字母“d”和“e”被合并成了一个项目。这就是我的问题所在,我不知道该如何解决。 - user984621

0
我是如何解决这个问题的:
在将XLS文件导出为CSV之前,在工作表的末尾添加一个带有字符'的额外列。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接