PHPでtxtファイルの特定の行をランダムに読み取る

12,577 6

最近、「一言」のような一言出力プラットフォームを開発しています。データベースには MySQL も SQLite も使用していません。txt 形式のテキストでデータを保存するつもりだからです。

理由はとても簡単で、txt は書き込みや読み出しの速度が比較的速く、メモリ容量もあまり消費しません。また、この技術の難易度も高くなく、PHP によるテキストの読み取りだけが関係します。以下では、私の経験を共有します。

2つの方法

主に次の2つを紹介します。1つ目はネット上の情報を参考にしたもので、2つ目は自分で考えたものです。個人的には、やはり自分の方法のほうが少し良いと思います。

ソースコード取得版

コードは次のとおりです。

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 の実践を記録し、ソフトウェアツールやデジタル体験、コードの外で得た見聞と思索を共有します。