2013-07-10 62 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