ランダムに複数のテキストを抽出する方法

このQ&Aのポイント
  • php超初心者のために、同じフォルダ内のテキストファイルから複数のテキストをランダムに抽出する方法をご教示ください。
  • 抽出するテキストは、重複しないようにしたいと思っています。
  • ランダムに複数のテキストを抽出する際には、shuffle関数と配列を使用することで実現できます。
回答を見る
  • ベストアンサー

別ファイルからのランダム抽出について

php超初心者です。 よろしくお願いします。 同階層にあるphpフォルダから 1行だけ選択する方法は <?php $data = file("./php/random.txt"); srand((double)microtime()*1000000); shuffle($data); echo $data[0]; ?> でできたのですが、 これを同じphpフォルダのrandom.txtから ランダムに3~4つ抽出するには どのように書けばいいのでしょうか? (抽出したテキストはダブらないようにしたいと思います。) *random.txtには10行ほどのテキストが記述されています。 以上、ご回答よろしくお願いします。

  • PHP
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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);の前)に出してください。 コードのコピペだけでなく、コードの意味や動作確認をしっかり行ってください。 それを繰り返すことで補足質問のようなことは、ご自分で解決出るようになるはずです。

saataakaa
質問者

お礼

ありがとうございます。 おかげさまで目的のものができました! phpは今週初めて見たばかりで コードの意味とか全く考えずに質問したために 何度もお手間おかけしました。 ありがとうございました。

その他の回答 (2)

回答No.2

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++ ) に変更してください。

saataakaa
質問者

補足

ご回答ありがとうございます。 <?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が表示されませんでした。

回答No.1

>ランダムに3~4つ抽出するには shuffleによってランダムに並んでいるのだから for( $i=0;$i < 3;$i++ ) { echo $data[$i]; } でいいのでは?

saataakaa
質問者

補足

回答ありがとうございます。 <?php for( $i=0;$i < 3;$i++ ) { $data = file("./php/random.txt"); srand((double)microtime()*1000000); shuffle($data); echo $data[$i]; } ?> という式に変更してみたのですが、 3つ抽出されるようにはなったものの、 ずっと3つで4つ抽出される時がありませんでした。 かつ、抽出したテキストはダブることがありました。 私の記述が間違っているのでしょうか?

関連するQ&A

  • includeでのローカルファイルの呼び出しについて

    いろいろやってみて原因が全くわからなかったので、わかる方はご回答願えますと幸いです。 PHPでランダムで文字を表示するスクリプトを作り、下記のように設置して問題なく表示出来ていました。(右の数字はパーミッションです) /home(755) │└index.php(644) /random(755)  ├random.php(644)  └random.txt(606) random.phpでrondom.txt内のデータをランダムに取り出して表示させ、その内容をindex.phpに <? include("http://xxxxx.xxx/random/random.php");?> と呼び出しを行っていました。 しかしサーバー管理者に外部ファイルの呼び出しは高負荷がかかるのでローカルからの呼び出しに変更してほしいと連絡を受け、 <? include("./random/random.php");?> のように修正を行ったところ、以下のようなエラー文が吐き出されてしまいました。 Warning: file(random.txt) [function.file]: failed to open stream: No such file or directory in /xxxxxxxx/random/random.php on line 2 このエラーの回避方法についてご存じの方がいたらご教授願えればと思います。

    • ベストアンサー
    • PHP
  • php 外部ファイルについて

    php初心者です。 テキスト表示でランダムリンクをしたいのですが リンク先のURLとテキストを外部ファイルにしたいのです。 現在------------------------ <?php srand((double)microtime()*1000000); $ad_list1 = file("20.txt"); $ad_key1 = array_rand($ad_list1, 2); $ad1 = $ad_list1[$ad_key1[0]]; // 表示 echo "ID=$ad1"; ?> ----------------------------- ↑このphpソースを組み入れ、外部ファイル20.txtには ----------------------------- <a href="http://domain.jp/?id=111">111</a> <a href="http://domain.jp/?id=222">222</a> <a href="http://domain.jp/?id=333">333</a> ・ ・ ------------------------------ という感じでリンク先URLを1行ずつ書いています。 テキスト表示は ID=111 という感じで表示されるようにはなったのですが phpソースの中に http://domain.jp/? までを組み込んで、外部ファイルの内容を ------------------------------ 111 222 333 ・ ・ ------------------------------ とするだけで、 表示される ID=111をクリックすると http://domain.jp/?111 のページが表示されるようにするには どうすれば良いのでしょうか。 また、そういった事は可能でしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • よく使われてるPHPランダム広告について。

    よく使われてる(ネット上で見かける)PHPランダム広告についてですが、 // 初期化 srand((double)microtime()*1000000); $ad_list1 = file($absolute_path."/modules/ads/ads_01.txt"); $ad_key1 = array_rand($ad_list1, 2); // 広告の表示 $ad1 = $ad_list1[$ad_key1[0]]; 1.現在でも、srand関数を使う必要がありますか? 2.広告の表示は1つなのですが、array_rand($ad_list1, 2);の変数以外の部分の引数を1もしくは、何も書かない場合は広告が表示しないのは、何故なのでしょうか。2を書かないとだめで。。。 ちなみに、ads_01.txtの内容は、2行。 <a href=""><img src="" alt="" /></a> <a href=""><img src="" alt="" /></a> (""の内容は省略しています。) 色々調べたり、試しましたが、Xでした。。。 みなさん、ご回答いただければと思います。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP開発「バナーをランダムに表示させる」

    PHP開発「バナーをランダムに表示させる」 (1)random.php <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> <title>バナーをランダムに表示</title> </head> <body> <?php require_once("follow.php") ?> </body> </html> (2)random.ini [info] count=4 width=221 height=46 [data] url1=http://px.xframework.net/ image1=banner01.jpg alt1=セミナー情報 weight1=50 url2=http://px.xframework.net/ image2=banner02.jpg alt2=セミナー情報-禁止 weight2=20 url3=http://px.xframework.net/ image3=banner03.jpg alt3=開発事例 weight3=15 url4=http://px.xframework.net/ image4=banner04.jpg alt4=開発事例-禁止 weight4=15 (3)follow.php <?php mt_srand((double)microtime()*100000); $random = mt_rand(1,100); $count = 0; $arrayini = parse_ini_file("random.ini",TRUE); for($i =1; $i<=$arrayini['info']['count']; $i++) { if($random > $count && $random <= $count+$arrayini['data']['weight'.$i]) { echo("<a href='".$arrayini['data']['url'.$i]."'> <img border='0' src='".$arrayini['data']['image'.$i]."' width='".$arrayini['info']['width']."' height='".$arrayini['info']['height']."' alt='".$arrayini['data']['alt'.$i]."' /> </a>"); } $count+=$arrayini['data']['weight'.$i]; } ?> 実行すると 「Warning: Error parsing random.ini on line 9 in C:\Apache Software Foundation\Apache2.2\htdocs\test.php\follow.php on line 9」 エラーが表示されます。 原因は何なのでしょうか? Windows Vistaです。

    • ベストアンサー
    • PHP
  • ランダム表示文字について

    if ( open( IN,"hoge.txt" ) ) {   @line = <IN>;   close( IN ); } else {   exit; } $random1 = @line[rand(@line)]; $random2 = @line[rand(@line)]; $randam3 = @line[rand(@line)]; テキストファイルから1行文字をランダムに表示するプログラムを書き実行できたのですが、このままだとrandom1,2,3の変数に同じものが入ってしまう可能性があります。 これで全て違うものが入るようなプログラムを書きたいのですが、そのようなことは可能でしょうか?

    • ベストアンサー
    • CGI
  • アップロードしたファイル名をランダムに書き換え

    <?php move_uploaded_file($_FILES["upload_file"]["tmp_name"], "../mov/" . $_FILES["upload_file"]["name"]); echo 'document.getElementById("mov").value="',$_FILES["upload_file"]["name"],'"'; ?> 以上のようなアップロードされたファイルをmovフォルダに移動し、さらにそのファイル名をエコーするPHPがあるのですが、 途中でファイル名をランダムな「数字10桁.拡張子」に変換してmovフォルダに移動し、そのファイル名を上記の様な形に沿ってエコーしたいのですが、どのようにすればよろしいでしょうか。

    • ベストアンサー
    • PHP
  • ランダムに1データだけ抽出したい

    「おみくじ」みたいなものを作っています。 MYSQLにautoincrementでデータを蓄積しています。 PHPから1データだけランダムに取り出そうと以下の構文で抽出しています。 select * from data order by Rand() LIMIT 0,1; データ数はかなり貯まっているのですが、同じようなデータばかり抽出しているような気がしています。 これは気のせいでしょうか? また、データをしょっちゅう削除していたので、番号が飛び飛びになっています。 1.2.3.5.8.9.10.のような感じです。 このように歯抜けの状態でもRand()はちゃんと存在するデータからランダムに選んでいるのでしょうか?

    • ベストアンサー
    • MySQL
  • フォルダ内のHTMLにランダムに飛ばす

    以下のソースでadsフォルダ内にあるhtmlファイルを ランダムに呼び出しているのですが 実行をすると正常に表示をするときと ページが真っ白で何も表示しないときがあり困っています。 どなたかどこに問題があるか分かる方宜しければ 教えて頂けないでしょうか。 宜しくお願い致します<(_ _)> (ソース) <?php $dir_name = "ads"; $ads = array(); $dh = opendir($dir_name); while ($data = readdir($dh)) { if (!is_dir($data)) { array_push($ads, $data); } } closedir($dh); shuffle($ads); include("$dir_name/$ads[0]"); ?> (プログラムの目的) adshuffle.phpにアクセスするとadsフォルダ内にあるhtmlを ランダムに読み込む。 (階層) |_adshuffle.php |_ ads  |_ 001.html  |_ 002.html  |_ ・  |_ ・  |_ ・  |_ 999.html *最終的な目的は999までhtmlを増やしていく予定です。

    • ベストアンサー
    • PHP
  • 10行単位の文字列をランダムに表示するには

    10行単位になっている文字群をランダムに表示したいのですが。 たとえば、文字列や数字の列、スクリプトなどが、10行単位でdata.txtに入っています。 ランダムに、その文字列を10行単位で表示する方法です。 こんな形で、呼び出し行を入れてブラウザに表示したいです。 <?php require("data.txt"); ?> 具体例でいいますと、強大なサイトを数名で作っていて、それぞれのアカウントのアドワース広告をランダムに表示したいなどという場合です。 ひとかたまり10行の広告が7つあれば、70行です。 それをランダムに10行単位で呼び出せば可能かと思うのですが。 バナーやテキストのランダム広告はたくさんありますが、今回のようなものは探してもないので、教えていただけるとありがたいです。 もちろんもっといい方法があれば歓迎です。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • Excel VBA テキストファイルからの抽出

    Excel VBAにて、テキストファイルから文字列を選別して、それをエクセルファイルのテキストボックスに張り付けるコードの記述をご教授いただけますでしょうか。 環境はWindows7 Pro Excel2010 下記テキストファイルです。 test.txt IDENTIFICATION DIVISION. PROGRAM-ID. sample AUTHOR. XXX * ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT A ASSIGN TO B SELECT C ASSIGN TO D DATA DIVISION. FILE SERECTION. この FILE-CONTROL.と DATA DIVISIONの間に挟まれている SELECT A ASSIGN TO B SELECT C ASSIGN TO D この2行を取り出して、エクセルファイル上にあるテキストボックス張り付ける処理です。 よって、FILE-CONTROL.と DATA DIVISION.の間にある不特定多数の行を抽出するロジックです。 テキストボックスに張り付ける前の行を抽出するだけでも、ご教授頂けたら幸いです。 よろしくお願いします。

専門家に質問してみよう