是否在PHP中显示CSV文件中上次输入的数据?

是否在PHP中显示CSV文件中上次输入的数据?,php,csv,fgetcsv,Php,Csv,Fgetcsv,我有一个CSV文件,有一个初始标题行和未知行数。行格式为: 姓名数据、电子邮件数据、单元格数据、dob数据 我想打开CSV文件,然后在表格中描述最后输入的行中的数据,如下所示: Name: name_data Email: email_data Cell: cell_data D.O.B.: dob_data 我想我可以使用fgetcsv(),但我不确定一旦得到数据,如何解析它 有什么想法吗 谢谢-Joe$fp=fopen(“csvfile.csv”,“r”); $fp = fopen("cs

我有一个CSV文件,有一个初始标题行和未知行数。行格式为:

姓名数据、电子邮件数据、单元格数据、dob数据

我想打开CSV文件,然后在表格中描述最后输入的行中的数据,如下所示:

Name: name_data
Email: email_data
Cell: cell_data
D.O.B.: dob_data
我想我可以使用fgetcsv(),但我不确定一旦得到数据,如何解析它

有什么想法吗

谢谢-Joe

$fp=fopen(“csvfile.csv”,“r”);
$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>
//读取所有记录并分配给$rec; 而($rec=fgetcsv($fp)){} ?> //rec将包含最后一行 姓名: 电邮: 单元格: D.O.B:
或者,如果您预期文件非常长,则可以通过将文件指针定位在距离文件末尾的最大记录长度的两倍处,然后遍历记录集,从而避免遍历每条记录

$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>
$filesize=filesize(“csvfile.csv”);
$maxRecordLength=2048;
$fp=fopen(“csvfile.csv”,“r”);
//从文件末尾附近开始,一直读到行尾
fseek($fp,max(0,$filesize-($maxRecordLength*2));
fgets(fp);
//然后按照上面的步骤做
而($rec=fgetcsv($fp)){}
?>
姓名:
电邮:
单元格:
D.O.B:
$fp=fopen(“csvfile.csv”、“r”);
//读取所有记录并分配给$rec;
而($rec=fgetcsv($fp)){}
?>
//rec将包含最后一行
姓名:
电邮:
单元格:
D.O.B:
或者,如果您预期文件非常长,则可以通过将文件指针定位在距离文件末尾的最大记录长度的两倍处,然后遍历记录集,从而避免遍历每条记录

$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>
$filesize=filesize(“csvfile.csv”);
$maxRecordLength=2048;
$fp=fopen(“csvfile.csv”,“r”);
//从文件末尾附近开始,一直读到行尾
fseek($fp,max(0,$filesize-($maxRecordLength*2));
fgets(fp);
//然后按照上面的步骤做
而($rec=fgetcsv($fp)){}
?>
姓名:
电邮:
单元格:
D.O.B:

当您只关心第一行和最后一行时,使用
fgetcsv()
解析文件的每一行似乎效率低下。因此,我将使用和:


注意:您可以通过解析
$rows[0]
来为标题使用相同的逻辑当您只关心第一行和最后一行时,使用
fgetcsv()
解析文件的每一行似乎效率低下。因此,我会使用and:


注意:您可以通过解析
$rows[0]为标题使用相同的逻辑

fgetcsv的maual页面上的示例一是一个伟大的开端fgetcsv的maual页面上的示例一是一个伟大的开端与我的版本相比,我的版本和你的版本都是以空间为食,而我的版本则以处理器时间为食。我的第二种方法应该是一个很好的折衷方案。这对我来说非常有效,看起来非常干净。谢谢。我的版本和你的版本之间的权衡是,你的版本贪吃空间,我的版本贪吃处理器时间。我的第二种方法应该是一个很好的折衷方案。这对我来说非常有效,看起来非常干净。谢谢。很好地提到了
fseek()
选项。但您正在对每行的大小进行假设。@JasonMcCreary True…但有了这些数据的知识,我认为可以找到一个安全和合理的值。在fseek上添加了对max的调用,以便我们可以确保文件指针永远不会位于文件开头之前。
fseek()很好地提到了
选项。但您正在对每行的大小进行假设。@JasonMcCreary True…但了解这些数据后,我认为可以找到一个安全且合理的值。在fseek上添加了对max的调用,以便我们可以确保文件指针永远不会位于文件开头之前。