0

最初のヘッダー行と行数が不明な 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() を使用できると考えていますが、取得したデータを解析する方法がわかりません。

何か案は?

ありがとう - ジョー

4

2 に答える 2

7

fgetcsv()最初と最後の行だけを気にする場合、ファイルのすべての行を解析するのは効率が悪いようです。そのため、私は and を使用file()str_getcsv()ます:

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

注:を解析することにより、ヘッダーに同じロジックを使用できます$rows[0]

于 2013-07-10T02:44:36.017 に答える
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>

または、ファイルが非常に長いと予想される場合は、ファイル ポインターをファイルの末尾から最大レコード長の 2 倍の位置に置き、レコード セットをウォークすることで、各レコードをウォークする必要を回避できます。

$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>
于 2013-07-10T02:35:03.393 に答える