【问题标题】:How to use PHP fgetcsv to create an array for each piece of data in csv file?如何使用 PHP fgetcsv 为 csv 文件中的每条数据创建一个数组?
【发布时间】:2010-05-11 15:40:08
【问题描述】:

我正在尝试将数据从 csv 文件导入到一些 html 代码中,以便在我已经编码的图形中使用它。我正在尝试使用 PHP 和 fgetcsv 为每个单独的数据创建数组,以使用 PHP 将其放入 html 代码中。我知道如何打开 csv 文件并使用 PHP 打印它,以及如何打印每个单独的行,但不是用逗号分隔的每条数据。有没有办法做到这一点?

如果这有帮助,这是我尝试导入的 csv 数据。

May 10,72,12,60
May 11,86,24,62
May 12,67,32,34
May 13,87,12,75
May 14,112,23,89
May 17,69,21,48
May 18,98,14,84
May 19,115,18,97
May 20,101,13,88
May 21,107,32,75

我希望这是有道理的。


我正在尝试将值放入以下 ​​html 代码:

<dd class="pVALUE3"><span><b>VALUE3</b></span></dd>
<dd class="sub pVALUE2" ><span><b>VALUE2</b></span></dd>

到目前为止,我的 PHP 代码是:

    <?PHP 
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $date[$c] = $data[0]
        echo "<dd class=\"p" . $data[2] . echo "\"><span><b>" . $data[2] . echo "</b></span></dd>
        <dd class=\"sub p" . $data[3] .  echo "\" ><span><b>" . $data[3] . echo "</b></span></dd>"
        }
                    ?>

但它正在返回,有一个意外的 T_ECHO ...

【问题讨论】:

  • 到目前为止你有什么 PHP 代码?

标签: php programming-languages csv fgetcsv


【解决方案1】:

我已经设法使用以下代码解决了这个问题:

 <?PHP
/* Open CSV file */

$handle = fopen("defects.csv", "r");
$c = 0;
/* gets data from csv file */
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
/* stores dates as variable $date */
        $date[$c] = $data[0];
        $c++;
        /* inserts defect data into html code */
        echo "<div class=\"bar\"><dd class=\"p" . $data[2] . "\"><span><b>" . $data[2] . "</b></span></dd></div>";
        echo "<div class=\"subbar\"<dd class=\"sub p" . $data[3] . "\" ><span><b>" . $data[3] . "</b></span></dd></div>";
}

echo "</dl>";
echo "<ul class=\"xAxis\">";
/* X AXIS */
/* inserts date data into html code for x axis */
for ($d=0; $d < $c; $d++) {
    echo "<li>" . $date[$d] . "</li>";
}
?>

【讨论】:

    【解决方案2】:

    我认为你已经走到了这一步?

    while (($row = fgetcsv($handle, null, ",", '"')) !== false) {
            print_r($row);
    

    之后就可以了

    foreach($row as $field){
       ...
    

    没有?

    对于您提供的导入数据,您必须:

    preg_match('/^(\w+) (\d+)$/i', $row[0], $bits);
    $month = $bits[1];
    $row[0] = $bits[2];
    

    获取月份名称。

    正如 thetaiko 评论的那样,粘贴您的代码,也许有一个错误需要解决。

    【讨论】:

      【解决方案3】:

      我假设您希望行中的每个项目都作为单独的数据,对吗?所以'May 10'、'72'、'12'等都是分开的?

      使用 fgetcsv 你应该可以做到这一点:

      while (($data = fgetcsv('file.csv')) !== FALSE)
      {
          foreach ($data as $element)
          {
              echo $element.' ';
          }
          echo '<br />';
      }
      

      每次 fgetcsv 读取一行(直到返回 FALSE 表示文件结束)你可以循环遍历 $data 数组(如果它是一个有效的数组,可能需要检查...)每个 $element 现在逗号之间的一项数据。

      【讨论】:

      • for fgetcsv - "handle - 指向由 fopen()、popen() 或 fsockopen() 成功打开的文件的有效文件指针。"
      猜你喜欢
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 2020-05-11
      • 1970-01-01
      • 1970-01-01
      • 2017-01-20
      • 1970-01-01
      • 2017-01-17
      相关资源
      最近更新 更多