我想使用php在表格中整齐地显示.csv文件。该文件的某些内容为空字段。
这是我的第一种方法,遇到错误但在一行中显示数据。据说它们应该分别显示在各自的字段中。
应该是这样的:
<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>
我的代码现在在列表方面有错误。并在一个字段中显示数据。希望您能够帮助我。感谢
答案 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