2

私は、ランダムな侮辱を印刷するオンライン アプリケーションを作成しようとしています (未熟に聞こえるかもしれませんが)。140 行のリストがあり、1 行全体を印刷したいと考えています。ありますが、それmt_rand(min,max)を一緒に使用するとfgets(file, "line")、乱数の行は表示されず、文字が表示されます。何か助けはありますか?これまでのすべてのコードを以下に示します。

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

4 に答える 4

1

これを試してみてください。やりたいことの簡単なバージョンです。

$file = file('Insults.txt');
echo $file[array_rand($file)];
于 2013-06-02T22:11:44.163 に答える
0

最初: fgets() を正しく使用することに完全に失敗しました。2 番目のパラメーターの意味については、マニュアルを参照してください (明らかに、あなたが考えているものとは異なります)。

2番目: file() ソリューションは機能します...ファイルサイズが特定のサイズを超えて完全なPHPメモリを使い果たすまで。注意: file() は完全なファイルを配列に読み込みます。

読み取ったデータのほとんどを破棄する必要があることを意味するとしても、1 行ずつ読み取るほうがよい場合があります。

$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);

(未検証!)

于 2013-06-03T14:27:56.337 に答える
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;
于 2013-06-02T22:11:41.793 に答える
0

これに使用file()します。ファイルの行を含む配列を返します。

$lines = file($filename);
$line = mt_rand(0, count($lines));   

echo $lines[$line];
于 2013-06-02T22:12:18.533 に答える