如何从文件中选择特定行?

时间:2013-06-02 22:08:53

标签: php

我正在尝试制作(因为这听起来不成熟)在线应用程序打印随机侮辱。我有一个140行长的列表,我想打印一整行。有mt_rand(min,max)但是当我在fgets(file, "line")旁边使用它时它没有给我随机数的行,它给了我这个角色。有帮助吗?我到目前为止已经拥有了所有代码。

<?php
$file = fopen("Insults.txt","r");
echo fgets($file, (mt_rand(1, 140)));
fclose($file);
?>

4 个答案:

答案 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);

(未经测试!)