Baca setiap baris file txt ke elemen array baru

118

Saya mencoba membaca setiap baris file teks ke dalam array dan memiliki setiap baris dalam elemen baru.
Kode saya sejauh ini.

<?php
$file = fopen("members.txt", "r");
$i = 0;
while (!feof($file)) {

$line_of_text = fgets($file);
$members = explode('\n', $line_of_text);
fclose($file);

?>
Dan
sumber
1
Apakah ada yang disimpan dalam larik dengan kode Anda apa adanya? Masalah khusus apa yang Anda alami?
Chris Bornhoft
1
Peringatan: FALSE dari fopen akan mengeluarkan peringatan dan menghasilkan loop tanpa batas di sini. php.net/manual/en/function.feof.php
Gjermund Dahl
Terlepas dari tanggal utas, namun '\n\'tidak akan meledak sementara itu harus a "\n"agar diurai sebagai urutan pelarian.
codekandis

Jawaban:

397

Jika Anda tidak memerlukan pemrosesan khusus, ini akan melakukan apa yang Anda cari

$lines = file($filename, FILE_IGNORE_NEW_LINES);
Yanick Rochon
sumber
file()tampaknya jauh lebih lambat daripada file_get_contents+ explodeuntuk menyusun
Ron
@Ron Saya setuju. Kemudian lagi, Anda tidak boleh membaca file dengan cara ini di setiap permintaan. Itu konyol, meskipun solusinya optimal. Konten file harus disimpan di cache memori, atau bahkan di database. Bahkan PHP menyimpan konten file yang diurai. Maksud saya, kami jauh dari PHP 4,3
Yanick Rochon
35

Cara tercepat yang saya temukan adalah:

// Open the file
$fp = @fopen($filename, 'r'); 

// Add each line to an array
if ($fp) {
   $array = explode("\n", fread($fp, filesize($filename)));
}

di mana $ filename akan menjadi jalur & nama file Anda, mis. ../filename.txt.

Tergantung bagaimana Anda mengatur file teks Anda, Anda mungkin harus bermain-main dengan \ n bit.

Drew Dello Stritto
sumber
1
Saya akan menggunakan "PHP_EOL" daripada "\ n", ini terlihat begitu, $ array = explode (PHP_EOL, fread ($ fp, filesize ($ filename)));
Fabian Harmsen
Terima kasih Drew, setelah mencoba banyak fungsi, milik Anda adalah satu-satunya yang berhasil. Istilah penelusuran saya <br> dan bukan \ n Anda. File saya dibaca hanya sebagai satu larik nilai besar, seluruh teks hanyalah satu item larik $ myarr [0], jadi pengacakan tidak berfungsi pada satu item. Semoga membantu seseorang. Terima kasih lagi.
mana
27

Gunakan saja ini:

$array = explode("\n", file_get_contents('file.txt'));
RoLife
sumber
26
$yourArray = file("pathToFile.txt", FILE_IGNORE_NEW_LINES);

FILE_IGNORE_NEW_LINEShindari untuk menambahkan baris baru di akhir setiap elemen array
Anda juga dapat menggunakan FILE_SKIP_EMPTY_LINESuntuk Melewati baris kosong

referensi di sini

iianfumenchu
sumber
23
<?php
$file = fopen("members.txt", "r");
$members = array();

while (!feof($file)) {
   $members[] = fgets($file);
}

fclose($file);

var_dump($members);
?>
Gaurav
sumber
1
Oke saya sudah bekerja dengan sempurna terima kasih. Namun saya perlu menetapkan vaiable = ke elemen array. $ var = $ ary [1]; tidak bekerja. ary [1] = "tes". Jika itu membantu.
Dan
1
Jalankan penghitung sendiri dan atur indeks dalam array
Prasad
7
$lines = array();
while (($line = fgets($file)) !== false)
    array_push($lines, $line);

Jelas, Anda harus membuat pegangan file terlebih dahulu dan menyimpannya di $file.

Rafe Kettler
sumber
7

Semudah itu:

$lines = explode("\n", file_get_contents('foo.txt'));

file_get_contents() - mendapatkan seluruh file sebagai string.

explode("\n")- akan memisahkan string dengan pembatas "\n"- apa itu ASCII-LF escape untuk baris baru.

Tetapi perhatikan - periksa apakah file tersebut memiliki akhiran UNIX -Line.

jika "\n"tidak akan bekerja dengan baik Anda memiliki pengkodean2 baris baru dan Anda dapat mencoba "\r\n", "\r"atau"\025"

CodeBrauer
sumber
3
$file = __DIR__."/file1.txt";
$f = fopen($file, "r");
$array1 = array();

while ( $line = fgets($f, 1000) )
{
    $nl = mb_strtolower($line,'UTF-8');
    $array1[] = $nl;
}

print_r($array);
Attila Nagy
sumber
1

Anda berada di jalur yang benar, tetapi ada beberapa masalah dengan kode yang Anda posting. Pertama-tama, tidak ada tanda kurung tutup untuk loop sementara. Kedua, $ line_of_text akan ditimpa dengan setiap iterasi loop, yang diperbaiki dengan mengubah = menjadi a. = Dalam loop. Ketiga, Anda meledakkan karakter literal '\ n' dan bukan baris baru yang sebenarnya; di PHP, tanda kutip tunggal akan menunjukkan karakter literal, tetapi tanda kutip ganda sebenarnya akan menafsirkan karakter dan variabel yang lolos.

    <?php
        $file = fopen("members.txt", "r");
        $i = 0;
        while (!feof($file)) {
            $line_of_text .= fgets($file);
        }
        $members = explode("\n", $line_of_text);
        fclose($file);
        print_r($members);
    ?>
Nick Andren
sumber
1
    $file = file("links.txt");
print_r($file);

Ini akan menerima file txt sebagai array. Jadi tulis apa saja ke file links.txt (gunakan satu baris untuk satu elemen) setelah itu, jalankan halaman ini :) array Anda akan menjadi $ file

altayevrim
sumber
0

Ini telah dibahas di sini dengan cukup baik, tetapi jika Anda BENAR - BENAR membutuhkan kinerja yang lebih baik daripada apa pun yang tercantum di sini, Anda dapat menggunakan pendekatan yang menggunakan ini strtok.

$Names_Keys = [];
$Name = strtok(file_get_contents($file), "\n");
while ($Name !== false) {
    $Names_Keys[$Name] = 0;
    $Name = strtok("\n");
}

Catatan, ini mengasumsikan file Anda disimpan \nsebagai karakter baris baru (Anda dapat memperbaruinya sesuai kebutuhan), dan juga menyimpan kata / nama / baris sebagai kunci array dan bukan nilainya, sehingga Anda dapat menggunakannya sebagai tabel lookup, memungkinkan penggunaan isset(jauh, lebih cepat), daripada in_array.

Brian Leishman
sumber