2013-07-10 41 views
0

我有一个带有初始标题行和未知行数的CSV文件。该行格式为:在PHP中显示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

fgetcsv的maual页面上的一个例子是一个很好的开始 – 2013-07-10 02:32:45

+1

[你想要的是尾部信息:点击这里](http://stackoverflow.com/a/16999819/1226894) – Baba

回答

5

似乎低效的解析该文件的每一行与fgetcsv()当你只关心第一个和最后一行。因此,我会使用file()str_getcsv()

$rows = file('data.csv'); 
$last_row = array_pop($rows); 
$data = str_getcsv($last_row); 
// loop and output data 

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

+0

从我的版本和你的版本之间的折衷是你的空间是piggy,而我的piggy是处理器时间。我的第二种方法应该是一个很好的妥协。 – Orangepill

+0

这对我来说非常合适,看起来很干净。谢谢。 –

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> 
+0

不错的提及'fseek )'选项。但是你正在假设每条线的大小。 –

+0

@JasonMcCreary真的......但对于数据的了解,我认为可以找到安全和理智的价值。 – Orangepill

+0

在fseek上增加了对max的调用,这样我们就可以确保文件指针永远不会放在文件开始之前。 – Orangepill

相关问题