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);

?>

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);

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.


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'));

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


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

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

fclose($file);

var_dump($members);
?>

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.


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"


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);

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);
    ?>

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


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.