【问题标题】:Using fgetcsv() to generate HTML table with row data-attributes from array使用 fgetcsv() 从数组中生成带有行数据属性的 HTML 表
【发布时间】:2014-07-07 19:51:28
【问题描述】:

我正在使用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 表格。虽然我可以将每个数据值放入一个单独的单元格中,但我想将模型的 coloroptions 值列为 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 仅提供“颜色”的数据属性值(来自标签行)作为每个 &lt;tr&gt; 的属性。例如,

    <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,但从不更新循环内的值。您可能只需在循环内将 $color 更改为 $data[3] 就可以了。
  • 果然,解决了它...感谢输入。如果您添加为答案,我会接受。

标签: php arrays csv fgetcsv


【解决方案1】:

您的 $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);
?>

【讨论】:

  • 斯科特感谢您的回答 - 我投了赞成票,但看到了乔纳森的第一个,所以我接受了他的
【解决方案2】:

您在循环之外设置 $color,但从不更新循环内的值。您可能只需在循环内将 $color 更改为 $data[3] 就可以了。

【讨论】:

    猜你喜欢
    • 2019-10-15
    • 2016-07-23
    • 2023-03-07
    • 2023-03-16
    • 2011-04-21
    • 1970-01-01
    • 2011-03-27
    • 2015-08-09
    • 2014-06-29
    相关资源
    最近更新 更多