PHPでtxtファイルの特定の行をランダムに読み取る
12,577 6
最近、「一言」のような一言出力プラットフォームを開発しています。データベースには MySQL も SQLite も使用していません。txt 形式のテキストでデータを保存するつもりだからです。
理由はとても簡単で、txt は書き込みや読み出しの速度が比較的速く、メモリ容量もあまり消費しません。また、この技術の難易度も高くなく、PHP によるテキストの読み取りだけが関係します。以下では、私の経験を共有します。
2つの方法
主に次の2つを紹介します。1つ目はネット上の情報を参考にしたもので、2つ目は自分で考えたものです。個人的には、やはり自分の方法のほうが少し良いと思います。
ソースコード取得版
コードは次のとおりです。
PHP PHP
<?php
$data = file_get_contents($filename);
//按行分割数据
$arr = explode("\n", $data);
//随机读取100行
$rand = array_rand($arr,1); print_r($rand);
?>
詳しい説明はあまりしません。PHP の基礎が分かる方なら、見ればすぐに理解できるでしょう。
配列書き込み版
基本的な流れは、総行数を取得し、乱数を生成し、ランダムな行を取得して出力するというものです。コードは次のとおりです。
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)学到了,谢谢大佬。 但是第二种方法存在一个问题,有可能取到空行(即使txt里没有空行)
在什么情况下会获取到空行,能否提供一下txt
感谢!正有需要的!
另外博主大大能写个PHP咋个实现根据某个字符串查找其在txt文件的哪一行并且可以对哪一行整行数据重新写入,其他行的数据不变
产生随机行号时,不应该是0到n,应该是0到n-1
$n需要-1把 数组是按0开始计算的