解析CSV文件的PHP代码

3
我有一个csv文件,想要在php中使用。CSV文件的第一行是列名。每个值都是用逗号分隔的。
我希望能够把列名作为数组名称,并将该列的所有值放在该数组名称下面。所以,如果在column1下面有20行,则可以通过column1 [0]来显示第一行的内容(不是列名)。
如何实现这个功能?
1个回答

9
您想使用fgetcsv,它会将CSV文件的每一行作为一个数组获取。由于您想将每一列分别放入自己的数组中,因此可以从该数组中提取元素,并将其添加到表示列的新数组中。类似这样:
$col1 = array();
while (($row = fgetcsv($handle, 1000, ",")) !== FALSE) {
  $col1[] = $row[0];
}

另外,您可以使用fgetcsv将整个CSV文件读入2D矩阵中(前提是CSV文件不太大),如下所示:

$matrix = array();
while (($row = fgetcsv($handle, 1000, ",")) !== FALSE) {
  $matrix[] = $row;
}

然后将你想要的列提取到它们自己的数组中,如下所示:

$col1 = array();
for($i=0;$i<count($matrix);$i++) {
  $col1[] = $matrix[0][i];
}

我已尝试使用fgetcsv函数,但它不会将其放入列名数组中。 - keith
谢谢回复。它并没有做我希望的事情。有没有办法让它知道csv文件的第一行是列名,之后的每一行都是行?逗号分隔每一行的每一列? - keith
6
@keith,无意冒犯,您可否先阅读API文档并尝试自己编写代码,而不是请求别人为您编写代码。此外,如何处理CSV文件已经在SO上被问答了很多次,您可以使用搜索功能查找一些示例。 - Gordon
1
很抱歉,我以前对此事一无所知。我已经阅读了fgetcsv的手册,并在Stack Overflow上进行了搜索。你们看,我看到的示例并不适用于我的数据,这就是为什么我要问的原因。我现在想,也许是我的数据或计算机有问题。我使用的是Mac。显然,fgetcsv和Mac以及换行符存在问题...我添加了ini_set('auto_detect_line_endings',TRUE);仍然不起作用。我还读到说它在数据中有引号时会出现问题。我的某些数据有引号,而其他数据则没有。我的CSV是由Google Docs生成的。 - keith
@keith 抱歉这么晚才加入,但是 fgetcsv 只支持 PHP 5.3.4 或更高版本。也许你正在使用早期版本的 PHP。 - Sumit Gera
显示剩余2条评论

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