ホームページ  >  に質問  >  本文

PHPによるCSVファイルの逆読み込み

<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>
P粉512729862P粉512729862408日前577

全員に返信(2)返信します

  • P粉118698740

    P粉1186987402023-08-09 12:56:44

    読み取りたいファイルが区切り文字として改行のみを含む「単純な」ファイルの場合、後ろから前への読み取りは非常に簡単です。ただし、CSV は、フィールドと行の区切り文字、引用符 (引用符)、およびエスケープ文字を含む、より複雑な形式です。

    のようなデータが表示される場合があります。 リーリー

    これは完全に有効な CSV ですが、現在フォーラムで提案されているソリューションのほとんどには、データの逆読み取りに問題があります。

    最も信頼性の高い方法は、まずファイルの先頭からデータを読み取り、次にこの情報を使用してデータを逆方向に読み取ることです。最も単純なバージョンは、すべてを配列に入れてから、その配列を逆に読み取ることです。例:

    リーリー

    ただし、大きなファイルを処理している場合は、すべてのデータを保存する必要があるため、メモリの制約に遭遇する可能性があります。

    別の方法は、ファイルを 1 回読み取り、レコードの先頭にファイル オフセットのみを保存し、それらのオフセットを使用して再度逆方向に反復することです。


    リーリー

    ファイルを 2 回走査する必要があるというトレードオフがありますが、メモリの制約がある場合は、これを行う必要があります。

    以上のことを踏まえると、可能であれば、データベースで簡単にデータの順序を変更できるデータベースにデータを配置する方が良い選択肢になります。このコードはすでにデータベース関連の機能をある程度再実装していますが、さらにひどいものです。

    返事
    0
  • P粉513316221

    P粉5133162212023-08-09 10:41:12

    あるいは、for ループを使用することもできます

    リーリー

    このメソッドは、array_reverse() 関数に基づく他のメソッドよりも高速である必要があります

    返事
    0
  • キャンセル返事