如果某些字段为空,则在表中正确显示csv文件数据

时间:2016-06-09 03:43:36

标签: php csv html-table

我想使用php在表格中整齐地显示.csv文件。该文件的某些内容为空字段。

这是我的第一种方法,遇到错误但在一行中显示数据。据说它们应该分别显示在各自的字段中。

此处的代码输出: enter image description here

应该是这样的:

enter image description here

<table border = "1">
        <tr>
            <th>NAME</th>
            <th>Email</th>
            <th>Address</th>        
            <th>Payment</th>
            <th>Datepaid</th>
        </tr>
        <?php
          $data = file("data/payment.csv");
          foreach ($data as $line){
          $lineofarray = explode("\t", $line);
          list($name, $email, $address, $payment, $datepaid) = $lineofarray;//error here
        ?>
        <tr>
            <td>
                <?= $name?>
            </td>
            <td>
                <?= $email?>
            </td>
            <td>
                <?= $address?>
            </td>
            <td>
                <?= $payment?>
            </td>

            <td>
                <?= $datepaid?>
            </td>


        </tr>
        <? }?>
</table>

我的代码现在在列表方面有错误。并在一个字段中显示数据。希望您能够帮助我。感谢

2 个答案:

答案 0 :(得分:3)

请试一试。

$fp = fopen("data/payment.csv", "r");
while (($line = fgetcsv($fp)) !== false) {
        echo "<tr>";
        foreach ($line as $field) {
                echo "<td>" . htmlspecialchars($field) . "</td>";
        }
        echo "</tr>\n";
}

这是一种读取csv行的安全方法,因为它是unicode安全的,并且还支持用双引号括起来的字段。

答案 1 :(得分:1)

您应该使用fgetcsv

$fp = @fopen('data/payment.csv', 'r');
$tbl = '<table><thead><tr><th>NAME</th><th>Email</th><th>Address</th><th>Payment</th><th>Datepaid</th></tr></thead><tbody>';
while($r = fgetcsv($fp)){
  $tbl .= '<tr>';
  foreach($r as $v){
    $tbl .= '<td>'.htmlentities($v, ENT_QUOTES, 'UTF-8').'</td>';
  }
  $tbl .= '</tr>';
}
$tbl .= '</tbody></table>';
echo $tbl; // echo $tbl wherever you want