我有一个PHP文件,它从CSV文件中提取信息,并成功将其转换为仅显示特定行和列的表。
但是,CSV文件中包含逗号和空格的条目,用引号括起来。由于逗号,我的PHP文件将这些条目拆分为两个,并显示引号而不是使用引号来表示这是一个包含逗号和空格的字段。
例如,CSV文件如下所示:
AA,BB,"Surname, Initial",CC,DD,EE
“Surname和Initial”应该在结果表中的相同字段中,而是创建两个字段。
我真的想在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>";
}
答案 0 :(得分:1)
内置的fgetcsv()
函数应该处理任何正确的CSV格式。它具有允许您更改分隔符和预期报价类型的参数。如果CSV没有被破坏,这个函数应该解析它。尝试将其交换为您自己的解析器,根据CSV格式的需要调整参数,然后循环遍历生成的数组。