我有一个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()但是我不知道如何在获得数据后解析数据。
有什么想法吗?
谢谢 - 乔
答案 0 :(得分:6)
当您只关心第一行和最后一行时,使用fgetcsv()
解析文件的每一行似乎效率低下。因此,我会使用file()
和str_getcsv()
:
$rows = file('data.csv');
$last_row = array_pop($rows);
$data = str_getcsv($last_row);
// loop and output data
注意:您可以通过解析$rows[0]
为标题使用相同的逻辑。
答案 1 :(得分: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>