我正在尝试制作(因为这听起来不成熟)在线应用程序打印随机侮辱。我有一个140行长的列表,我想打印一整行。有mt_rand(min,max)
但是当我在fgets(file, "line")
旁边使用它时它没有给我随机数的行,它给了我这个角色。有帮助吗?我到目前为止已经拥有了所有代码。
<?php
$file = fopen("Insults.txt","r");
echo fgets($file, (mt_rand(1, 140)));
fclose($file);
?>
答案 0 :(得分:1)
试试这个,你想要做的更简单的版本:
$file = file('Insults.txt');
echo $file[array_rand($file)];
答案 1 :(得分:0)
$lines = file("Insults.txt");
echo $lines[array_rand($lines)];
或在函数内:
function random_line($filename) {
$lines = file($filename) ;
return $lines[array_rand($lines)] ;
}
$insult = random_line("Insults.txt");
echo $insult;
答案 2 :(得分:0)
为此使用file()
。它返回一个包含文件行的数组:
$lines = file($filename);
$line = mt_rand(0, count($lines));
echo $lines[$line];
答案 3 :(得分:0)
首先:你完全搞砸了正确使用fgets(),请参考手册中关于第二个参数的含义(显然不是你认为的那样)。
第二:file()解决方案将起作用......直到文件大小超过一定大小并耗尽完整的PHP内存。请记住:file()将完整的文件读入数组。
逐行阅读可能会更好,即使这意味着您将不得不丢弃大部分读取数据。
$fp = fopen(...);
$line = 129;
// read (and ignore) the first 128 lines in the file
$i = 1;
while ($i < $line) {
fgets($fp);
$i++;
}
// at last: this is the line we wanted
$theLine = fgets($fp);
(未经测试!)