我有一个带有初始标题行和未知行数的 CSV 文件。行格式为:
name_data、email_data、cell_data、dob_data
我想打开 CSV 文件,然后描述表格中最后输入行的数据,如下所示:
Name: name_data
Email: email_data
Cell: cell_data
D.O.B.: dob_data
我想我可以使用 fgetcsv() 但我不确定一旦我得到它如何解析数据。
有任何想法吗?
谢谢 - 乔
fgetcsv()
当您只关心第一行和最后一行时,解析文件的每一行似乎效率低下。因此,我会使用file()
and str_getcsv()
:
$rows = file('data.csv');
$last_row = array_pop($rows);
$data = str_getcsv($last_row);
// loop and output data
注意:您可以通过解析对标头使用相同的逻辑$rows[0]
。
$fp = fopen("csvfile.csv", "r");
// read all each of the records and assign to $rec;
while ($rec = fgetcsv($fp)){}
?>
// rec will end up containing the last line
<table>
<tr><td>Name:</td><td><?= $rec[0] ?></td></tr>
<tr><td>Email : </td><td><?= $rec[1] ?></td></tr>
<tr><td>Cell :</td><td> <?= $rec[2] ?></td></tr>
<tr><td>D.O.B :</td><td> <?= $rec[3] ?></td></tr>
</table>
或者,如果您预计文件真的很长,您可以通过将文件指针定位到文件末尾最大记录长度的两倍然后遍历记录集来避免遍历每条记录。
$filesize = filesize("csvfile.csv");
$maxRecordLength = 2048;
$fp = fopen("csvfile.csv", "r");
// start near the end of the file and read til the end of the line
fseek($fp, max(0, $filesize - ($maxRecordLength *2));
fgets($fp);
// then do same as above
while ($rec = fgetcsv($fp)){}
?>
<table>
<tr><td>Name:</td><td><?= $rec[0] ?></td></tr>
<tr><td>Email : </td><td><?= $rec[1] ?></td></tr>
<tr><td>Cell :</td><td> <?= $rec[2] ?></td></tr>
<tr><td>D.O.B :</td><td> <?= $rec[3] ?></td></tr>
</table>