PHP로 txt 파일의 특정 줄 내용을 무작위로 읽기
12,577 6
최근에 “한마디”와 비슷한 한마디 출력 플랫폼을 개발하고 있는데, 데이터方面에서는 MySQL도 사용하지 않았고 SQLite도 사용하지 않았습니다. txt 형식의 텍스트로 데이터를 저장할 생각이기 때문입니다.
이유는 매우 간단합니다. txt는 읽고 쓰는 속도가 비교적 빠르고 메모리 공간도 너무 많이 차지하지 않으며, 이 기술의 난이도도 높지 않아 PHP로 텍스트 내용을 읽는 것만 다루면 됩니다. 아래에서 제 경험을 공유하겠습니다.
두 가지 방법
주로 다음 두 가지를 소개하겠습니다. 첫 번째는 인터넷을 참고한 것이고, 두 번째는 제가 직접 생각해 낸 것입니다. 아무래도 제 방법이 조금 더 나은 것 같습니다.
소스 코드 가져오기 방식
코드는 다음과 같습니다
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开始计算的