PHP 隨機讀取 txt 檔案某一行內容

12,577 6

最近在開發一個類似「一言」的一句話輸出平台,資料方面我沒有用到 MySQL 也沒用到 SQLite,因為我打算用 txt 格式的文字來儲存資料。

理由很簡單,txt 寫出寫入的速度都比較快,而且不浪費太多的記憶體空間,這項技術難度也不高,只會涉及到 PHP 讀取文字的內容,下面分享一下我的經驗。

兩種方案

主要介紹以下兩種,第一種是參考網路上的,第二種是我自己想的,感覺還是我的方案比較好一些。

取得原始碼版

程式碼如下

PHP
<?php
$data = file_get_contents($filename); 
//按行分割數據
$arr = explode("\n", $data);
//隨機讀取100行
$rand = array_rand($arr,1); print_r($rand);
?>

不做太多的介紹了,會 PHP 基礎的小夥伴一看就懂。

寫入陣列版

基本思路是這樣的,取得總行數、產生隨機數、取得隨機行、輸出,程式碼如下

PHP
<?php
$f='1.txt';   //文件名
$a=file($f);  //把文件的所有內容獲取到數組裡面
$n=count($a); //獲得總行數
$rnd=rand(0,$n);    //產生隨機行號
$rnd_line=$a[$rnd]; //獲得隨機行
echo "$rnd / $n : $rnd_line"; //顯示結果
?>

原理都在上面的註釋裡面了,應該都能懂吧,反正我覺得挺簡單的。

評論

(6)
  1. Chrome 79 Windows 10

    学到了,谢谢大佬。 但是第二种方法存在一个问题,有可能取到空行(即使txt里没有空行)

  2. 沉醉于风
    Chrome 79 Windows 10

    感谢!正有需要的!

  3. 沉醉于风
    Chrome 79 Windows 10

    另外博主大大能写个PHP咋个实现根据某个字符串查找其在txt文件的哪一行并且可以对哪一行整行数据重新写入,其他行的数据不变

  4. 北云尘
    Chrome 78 Windows 10

    产生随机行号时,不应该是0到n,应该是0到n-1

  5. porry
    Chrome 86 Windows 10

    $n需要-1把 数组是按0开始计算的

發佈評論

© 2026 一紙忘憂. 保留所有權利.

一紙忘憂的個人網站,關於技術探索與日常生活,記錄 Web 開發、後端與 DevOps 實踐,分享軟體工具、數位體驗,以及程式碼之外的見聞與思考。