2

我有一个 PHP 文件,它从 CSV 文件中提取信息,并成功地将其转换为只显示特定行和列的表。

但是,CSV 文件中的条目中包含逗号和空格,并用引号括起来。由于逗号,我的 PHP 文件将这些条目分成两个,并显示引号而不是使用引号来指示这是一个包含逗号和空格的字段。

例如,CSV 文件如下所示:

AA,BB,"Surname, Initial",CC,DD,EE

“姓氏和姓名首字母”应该在结果表中的同一字段中,但正在创建两个字段。

我真的很想在 PHP 代码中解决这个问题,而不是通过修改 CSV 文件本身。代码在这里:

echo "<meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\"/>
      <link rel=\"stylesheet\" type=\"text/css\" href=\"test.css\">";
$file = 'CSV/test.csv';   
$lines = file($file);
if (file_exists($file)){
  //echo "$file exists<br/>"; 

echo '<table>';                     //create the html table
$x=2;       //define the first line to display
$y=20;       //define the last line to display
$line_counter=0;
foreach ($lines as $line) {         //loop to fill your table with csv data
  if($x<=$line_counter && $line_counter<=$y)
  {
    $expl = explode(",", $line);      //explode each line on "," to create the rows
    echo "<tr>";                      //create each line of your table
    $c=0;
    while ($c<=47) {                  //loop to extract columns 2 to 47
      if(($c % 2) == 1){              //odd  rows
        echo "<td class=\"odd\">".$expl[$c]."</td>";
      }
      elseif(($c == 0)){
        echo "<td class=\"even\">".$expl[$c]."</td>";
      }
      else{
        echo "<td class=\"even\">".$expl[$c]."</td>";    //even rows
      }
      $c++;
    }
    echo "</tr>";
    $x++;
  }
  $line_counter++;
}
echo "</table>";
}
4

1 回答 1

1

内置fgetcsv()函数应处理任何正确的 CSV 格式。它具有可让您更改分隔符和预期引用类型的参数。如果 CSV 没有损坏,这个函数应该可以很好地解析它。尝试将其换成您自己的解析器,根据 CSV 格式调整参数,然后循环遍历生成的数组。

http://www.php.net/manual/en/function.fgetcsv.php

于 2013-08-16T20:31:33.570 回答