• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:解説お願いします。)

知り合いからもらったtxtファイルのランダム表示ソースの解説

このQ&Aのポイント
  • 知り合いからもらったtxtファイルのランダム表示ソースの解説
  • ソースを用意して指定のディレクトリにtxtファイルをアップすることでランダムに表示される
  • 連絡が取れなくなった人からもらったtxtファイルの解説を求める

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

  • ベストアンサー
  • koke29
  • ベストアンサー率58% (114/196)
回答No.2

私は乱数は扱ったことが無いので、たぶん…の返答ですが このコードは複数向きでは無いと思いますよー $rand の値は常に範囲内のどれか一つの数字になりますから 例えばこれをもう一つ($rand2とかにして)実行するのは出来ますが 単純に処理すると$rand と $rand2 が同じ値になる可能性もあります で、乱数に疎い私が複数表示に挑むとしたら 配列番号を指定するための配列を作成して、その値をシャッフルしてから 表示に使う という方法をとるだろうと思います 大した量でも無いのでズバリ書いちゃうと $rand_text = array(); $rand = array(); $cnt = 0; $i = 1; if ($handlerDir = opendir($sorce_dir)){ while ($filename = readdir( $handlerDir )){ if ( $filename != "." && $filename != ".."){ array_push($rand_text,$filename); array_push($rand,$cnt); $cnt++; } } } shuffle($rand); $randam_sorce0 = file_get_contents($sorce_dir.'/'.$rand_text[$rand[0]]); $randam_sorce1 = file_get_contents($sorce_dir.'/'.$rand_text[$rand[1]]); これで<?=$randam_sorce0 ?>と<?=$randam_sorce1 ?>は違うものが 出るはずです ※$iを利用してもよいのですが、他の部分で使っている可能性が なきにしもあらずなので新しい変数$cntを追加してます 再度も言いますが、私は乱数には疎いので、mt_rand関数を使いながら もっと効率よく複数表示を実現する方法があるかもしれませんので 鵜呑みにはしないで下さいね(これも一つの方法という程度にして下さい)

petaturu
質問者

お礼

回答ありがとうございます。 こちらを参考に…というかそのまま使って動作確認をさせていただこうと思います。

その他の回答 (1)

  • koke29
  • ベストアンサー率58% (114/196)
回答No.1

//./hide_pc/randam_k.php側のソース で、わかる範囲で。 (間違いがあったら、どなたかご指摘頂けると助かります) <?php // 乱数ジェネレータの初期化 mt_srand((int)(microtime() * 10000)); // 空の配列を用意…指定ディレクトリ内のファイル名を格納する用 $rand_text = array(); // 変数の用意…今回の場合、謎(件数カウントして後で使うのかな?) $i = 1; // 1「もし$sorce_dirのディレクトリハンドル オープンに成功したら」 if ($handlerDir = opendir($sorce_dir)){ // 2「エントリの件数分、読み込みを繰り返して$filenameに代入してね」 while ($filename = readdir( $handlerDir )){ // 3「$filenameが『.』または『..』じゃなかったら」 if ( $filename != "." && $filename != ".."){ // 「配列 $rand_textに$filenameを格納してね」 array_push($rand_text,$filename); // 「最後に$iの値を+1してね」 $i++; } // 3の処理閉じ } // 2の処理閉じ } // 1の処理閉じ // 0~配列$rand_textの件数-1までの範囲で乱数を作る $rand = mt_rand(0,(count($rand_text) - 1)); /* -1するのは、配列の順番を指定する際のキーが「0」スタートだから。 「a,b,c,d,e」という値が配列に入っていたとすると 「0,1,2,3,4」がキーの値となります、キー2を指定→cとなる */ // $randam_sorceに配列$rand_textの$rand番目を読み込んだファイルを代入 $randam_sorce = file_get_contents($sorce_dir.'/'.$rand_text[$rand]); /* $rand(配列のキー)が4の場合、↑の説明でいくと $rand_textではeを読み込むことになります */ サッパリわからん…だったらスミマセン。

petaturu
質問者

お礼

解説ありがとうございます! どういう動きをしているのかはなんとなく把握できました。 しかしこれを理解して同じプログラムで複数箇所貼り付けれるプログラムにしたかったのですが自分にはレベルが高そうですorz