<p>CSV ファイルを読み取る PHP スクリプトがあります。CSV ファイルを最後の行から、つまり逆の順序で読み取るようにしたいと考えています。 </p>
<pre class="brush:php;toolbar:false;"><?php
$f = fopen("./data/data-esp8266-$idluf-$currentdata.csv", "r");
fgets($f);
while (($line = fgetcsv($f)) !== false) {
$row = $line[0];
$cells =explode(";",$row);
echo "
n";
foreach ($cells as $cell) {
echo "<td><a style='text-decoration:none;color:#fff;' class='tooltip' data-tool=' $cell'>" . htmlspecialchars($cell) . "< /a>n";
}
echo "</tr>n";
}
fclose($f);
?></pre>
<p><br /></p>
読み取りたいファイルが区切り文字として改行のみを含む「単純な」ファイルの場合、後ろから前への読み取りは非常に簡単です。ただし、CSV は、フィールドと行の区切り文字、引用符 (引用符)、およびエスケープ文字を含む、より複雑な形式です。
のようなデータが表示される場合があります。 リーリーこれは完全に有効な CSV ですが、現在フォーラムで提案されているソリューションのほとんどには、データの逆読み取りに問題があります。
最も信頼性の高い方法は、まずファイルの先頭からデータを読み取り、次にこの情報を使用してデータを逆方向に読み取ることです。最も単純なバージョンは、すべてを配列に入れてから、その配列を逆に読み取ることです。例:
リーリー
ただし、大きなファイルを処理している場合は、すべてのデータを保存する必要があるため、メモリの制約に遭遇する可能性があります。
別の方法は、ファイルを 1 回読み取り、レコードの先頭にファイル オフセットのみを保存し、それらのオフセットを使用して再度逆方向に反復することです。
リーリーファイルを 2 回走査する必要があるというトレードオフがありますが、メモリの制約がある場合は、これを行う必要があります。
以上のことを踏まえると、可能であれば、データベースで簡単にデータの順序を変更できるデータベースにデータを配置する方が良い選択肢になります。このコードはすでにデータベース関連の機能をある程度再実装していますが、さらにひどいものです。
あるいは、for ループを使用することもできます
リーリーこのメソッドは、array_reverse() 関数に基づく他のメソッドよりも高速である必要があります