Pembacaan PHP terbalik bagi fail CSV
P粉512729862
2023-08-08 18:24:19
<p>Saya mempunyai skrip PHP yang membaca fail CSV dan saya mahu ia membacanya bermula dari baris terakhir, iaitu, dalam susunan terbalik. </p>
<pre class="brush:php;toolbar:false;"><?php
$f = fopen("./data/data-esp8266-$idluf-$currentdata.csv", "r");
fgets($f);
manakala (($line = fgetcsv($f)) !== palsu) {
$row = $line[0];
$cells = meletup(";",$row);
echo "<tr>n";
foreach ($sel sebagai $sel) {
echo "<td><a style='text-decoration:none;color:#fff;' class='tooltip' data-tool=' $cell'>" . /a></td>n";
}
echo "</tr>n";
}
fclose($f);
?></pra>
<p><br /></p>
Jika fail yang anda ingin baca ialah fail "mudah" dengan hanya baris baharu sebagai pembatas, membaca dari belakang ke hadapan akan menjadi agak mudah. Walau bagaimanapun, CSV ialah format yang lebih kompleks, dengan pembatas medan dan baris, tanda petikan (petikan) dan aksara melarikan diri. Anda mungkin menjumpai data seperti
Ini adalah CSV yang sangat sah, tetapi kebanyakan penyelesaian yang dicadangkan pada masa ini di forum akan menghadapi masalah membaca data secara terbalik.
Kaedah yang paling boleh dipercayai adalah dengan terlebih dahulu membaca data dari permulaan fail dan kemudian menggunakan maklumat ini untuk membaca data secara terbalik. Versi paling mudah adalah dengan hanya meletakkan segala-galanya ke dalam tatasusunan dan kemudian membaca tatasusunan secara terbalik, seperti ini:
Tetapi jika anda berurusan dengan fail yang besar, anda mungkin menghadapi had memori kerana semua data perlu disimpan.
Alternatifnya ialah membaca fail sekali dan kemudian hanya menyimpan fail mengimbangi pada permulaan rekod dan kemudian melelang ke belakang sekali lagi menggunakan pengimbangan tersebut.
Terdapat pertukaran bahawa fail perlu dilalui dua kali, tetapi jika terdapat kekangan memori, maka ini perlu dilakukan.
Dengan semua pepatah ini, pilihan yang lebih baik ialah meletakkan data dalam pangkalan data, di mana pangkalan data boleh menyusun semula data dengan mudah jika boleh. Kod ini sudah melaksanakan semula fungsi berkaitan pangkalan data sedikit sebanyak, tetapi ia lebih teruk.
Sebagai alternatif, anda juga boleh menggunakan gelung for
Kaedah ini sepatutnya lebih pantas daripada kaedah lain berdasarkan array_reverse() fungsi