我正在使用fgetcsv()
读取这种格式的 csv 文件...
Make, Model, Origin, Color, Miles, Options
Chevy, Tahoe, Delaware, Black, 10000, LX
Ford, F150, Texas, Red, 5000, S
Chevy, Corvette, Utah, Red, 12000, SE
Mazda, Miata, Florida, Blue, 90000, LX
...然后生成一个 HTML 表格。虽然我可以将每个数据值放入单个单元格中,但我想列出模型的 color
和options
作为 HTML 数据属性的值。 所以我当前的输出如下:
<table>
<tr>
<td>Chevy</td>
<td>Tahoe</td>
<td>Delaware</td>
<td>Black</td>
<td>10000</td>
<td>LX</td>
</tr>
<tr>
<td>Ford</td>
<td>F150</td>
<td>Texas</td>
<td>Red</td>
<td>5000</td>
<td>S</td>
</tr>
</table>
当我希望它看起来像这样时:
<table>
<tr data-color="black" data-options="LX">
<td>Chevy</td>
<td>Tahoe</td>
<td>Delaware</td>
<td>10000</td>
</tr>
<tr data-color="red" data-options="s">
<td>Ford</td>
<td>F150</td>
<td>Texas</td>
<td>5000</td>
</tr>
</table>
但是,我现在使用的 PHP 仅提供“颜色”的数据属性值(来自标签行)作为每个 <tr>
上的属性。 。例如,
<tr data-color="Color" data-options="Options">
<td>Ford</td>
<td>F150</td>
<td>Texas</td>
<td>5000</td>
</tr>
有人建议从数组中获取适当的值作为每行的数据属性吗?这是我当前的 PHP:
<?php
$handle = fopen("cars.csv", "r");
$data = fgetcsv($handle, 1000, ",");
$color = $data[3];
$options = $data[5];
echo('<table>');
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
//generate HTML
echo('<tr data-color="' . $color . '" data-options="' . $options . '">');
foreach ($data as $index=>$val) {
echo('<td>');
echo htmlentities($val, ENT_QUOTES);
echo('</td>');
}
echo('</tr>');
}
echo("</table>");
fclose($handle);
?>
最佳答案
您的 $color
和 $options
变量当前只是列标题。
将代码更改为如下所示:
<?php
$handle = fopen("cars.csv", "r");
$data = fgetcsv($handle, 1000, ",");
$color = $data[3];
$options = $data[5];
echo('<table>');
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$color = $data[3];
$options = $data[5];
//generate HTML
echo('<tr data-color="' . $color . '" data-options="' . $options . '">');
foreach ($data as $index=>$val) {
echo('<td>');
echo htmlentities($val, ENT_QUOTES);
echo('</td>');
}
echo('</tr>');
}
echo("</table>");
fclose($handle);
?>
关于php - 使用 fgetcsv() 生成包含数组中行数据属性的 HTML 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24618682/