【问题标题】:parse csv file php解析csv文件php
【发布时间】:2011-04-25 05:01:59
【问题描述】:

我有一个要与 php 一起使用的 csv 文件。 csv 中的第一件事是列名。一切都用逗号分隔。

我希望能够将列名作为数组名,并且该列的所有值都将在该数组名下。因此,如果 column1 下有 20 行,那么我可以执行 column1[0] 并且第一个实例(不是列名)将显示为 column1。

我该怎么做?

【问题讨论】:

    标签: php csv


    【解决方案1】:

    你想要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 但它没有将它放入列名数组中。
    • 感谢您的回复。它并没有真正做到我希望的那样。有没有办法让它知道 csv 中的第一行是列名,之后的每一行是行?并且逗号分隔每一行的每一列?
    • 在运行循环提取行之前,只提取第一行作为标题。
    • @keith 无意冒犯,但是如何阅读 API 文档并自己尝试一下,而不是让人们为您编写代码。此外,在 SO 上经常询问和回答如何处理 CSV 文件,所以为什么不使用搜索功能来获取一些示例。
    • 对不起大家对此事一无所知。我已经阅读了 fgetcsv 的手册,并且已经在 SO 中搜索了该主题。您会看到我看到的示例不适用于我的数据,这就是我要问的原因。我现在在想,问题可能出在我的数据或计算机上。我在 Mac 上。显然 fgetcsv 和 Mac 以及新行存在问题...我添加了 ini_set('auto_detect_line_endings',TRUE);仍然无法正常工作。我还读到它在数据中的引号有问题。我的一些数据有引号,而另一些则没有。我的 csv 是由 Google Docs 生成的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    相关资源
    最近更新 更多