我的文本文件格式如下:
这是第一行。
这是第二行。
这是第三行。
在文本文件中可能会有更多的行。如何使用php从文本文件中每次刷新随机选择一行进行输出。 感谢您的所有评论。
我们需要处理多大的文件?简单的方法是将整个文件作为字符串数组加载到内存中,然后从0到N之间选取一个随机数组索引并显示该行。
如果文件大小可能非常大,则必须实现某种类型的流式解决方案。
下面的解决方案将从相对较大的文件中产生一个均匀分布的随机行,并且每个文件具有可调整的最大行大小。
<?php
function rand_line($fileName, $maxLineLength = 4096) {
$handle = @fopen($fileName, "r");
if ($handle) {
$random_line = null;
$line = null;
$count = 0;
while (($line = fgets($handle, $maxLineLength)) !== false) {
$count++;
// P(1/$count) probability of picking current line as random line
if(rand() % $count == 0) {
$random_line = $line;
}
}
if (!feof($handle)) {
echo "Error: unexpected fgets() fail\n";
fclose($handle);
return null;
} else {
fclose($handle);
}
return $random_line;
}
}
// usage
echo rand_line("myfile.txt");
?>
假设文件共有10行,则选取第X行的概率为:
1
1/2 * P(1)
2/3 * P(2)
(N-1)/N * P(N-1)
= 1/N
这将最终为我们提供一个均匀分布的随机行,而无需将整个文件读入内存。
希望这对你们有所帮助。
file()
将行读入数组中array_rand()
随机显示一个数组值$lines = file('my_file.txt');
echo $lines[array_rand($lines)];