- ベストアンサー
ランダムに複数のテキストを抽出する方法
- php超初心者のために、同じフォルダ内のテキストファイルから複数のテキストをランダムに抽出する方法をご教示ください。
- 抽出するテキストは、重複しないようにしたいと思っています。
- ランダムに複数のテキストを抽出する際には、shuffle関数と配列を使用することで実現できます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>Parse error:の表示が出てしまい、 「$maxno = rand(3,4)」の最後のセミコロン「;」が抜けてました。失礼しました。 先の回答でも触れましたが、どうして >$data = file("./php/random.txt"); >srand((double)microtime()*1000000); >shuffle($data); の3行をfor文の中において置くのでしょう? >抽出したテキストはダブることがありました。 ということの原因になっています。for文の前(正確には$maxno = rand(3,4);の前)に出してください。 コードのコピペだけでなく、コードの意味や動作確認をしっかり行ってください。 それを繰り返すことで補足質問のようなことは、ご自分で解決出るようになるはずです。
その他の回答 (2)
- cistronezk
- ベストアンサー率38% (120/309)
for文による動作は認識されますか? もしそうなら、 >$data = file("./php/random.txt"); >srand((double)microtime()*1000000); の2行はfor文から出しているはずです。 >ずっと3つで4つ抽出される時がありませんでした。 3つ表示か4つ表示するかもランダムなのでしょうか? どうやって3つ表示、4つ表示にするかの説明がありませんでしたので3つ固定にしました。 もしランダムに切り替えるなら、 >for( $i=0;$i < 3;$i++ ) を $maxno = rand(3,4) for( $i=0;$i < $maxno;$i++ ) に変更してください。
補足
ご回答ありがとうございます。 <?php $maxno = rand(3,4) for( $i=0;$i < $maxno;$i++ ) { $data = file("./php/random.txt"); srand((double)microtime()*1000000); shuffle($data); echo $data[$i]; } ?> と書き換えると Parse error:の表示が出てしまい、 indexが表示されませんでした。
- cistronezk
- ベストアンサー率38% (120/309)
>ランダムに3~4つ抽出するには shuffleによってランダムに並んでいるのだから for( $i=0;$i < 3;$i++ ) { echo $data[$i]; } でいいのでは?
補足
回答ありがとうございます。 <?php for( $i=0;$i < 3;$i++ ) { $data = file("./php/random.txt"); srand((double)microtime()*1000000); shuffle($data); echo $data[$i]; } ?> という式に変更してみたのですが、 3つ抽出されるようにはなったものの、 ずっと3つで4つ抽出される時がありませんでした。 かつ、抽出したテキストはダブることがありました。 私の記述が間違っているのでしょうか?
お礼
ありがとうございます。 おかげさまで目的のものができました! phpは今週初めて見たばかりで コードの意味とか全く考えずに質問したために 何度もお手間おかけしました。 ありがとうございました。