- ベストアンサー
【PHP】phpで毎日ランダムで変わる処理
- PHPで毎日変わる文面を作る方法について質問です。
- 外部のテキストファイルから日替わりランダムで表示したいと思っています。
- 試しに書いてみたコードでは正しく代入できているようなのですが、改行毎に代入したいときはどうすればいいでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>無駄でしたかね・・。 いえそうではなく、質問の命題と例示がことなっていたのでどういう結果がほしいのか 迷ったもので・・・、まぁ行ごとにデータ行の順列通りに、行の要素を日ごとに ランダムにするのであれば、srandでシード値を日付にして、shuffleすればよいでしょう。 <? $file_name = "./test.txt"; $str=file_get_contents($file_name); srand(mktime(0,0,0)); foreach(preg_split("/\r\n|\n|\r/ms",$str) as $val){ $array=explode(",",$val); shuffle($array); $list[]=$array; } print_r($list); ?>
その他の回答 (2)
- bm_hiro
- ベストアンサー率51% (200/388)
とりあえず、答えはyamabejpさんが出してくれていますので、俺はそちらが提示したスクリプトの間違いを指摘でもしたいと思います。 そちらが提示したスクリプトだと、$list[3]の内容は 「jkl[改行]mno」っていう、予想していないものになってしまっているかと思います。 file_get_contents() は 改行も含め、丸ごと一つの変数に代入します。 それをカンマでスプリットした場合、上記の$list[3]のようなことが起きるんじゃないかと思います。 最初から改行区切りで配列に入れたいのなら file()使ったほうがいいんじゃないかな~とか思ったり思わなかったり。 ちなみに、そちらが得ようとしていた配列にしたいなら、↓みたいな書き方もあります。 $fp=fopen("test.txt" , "r"); while($DimList[] = fgetcsv($fp , 0 , ",")) {} fclose($fp); print_r($DimList);
お礼
ご返答有難う御座います。 >> $list[3]の内容は 「jkl[改行]mno」っていう、予想していないものになってしまっているかと思います。 確かに。。。おっしゃる通りの結果になっております・・・(涙 file()と言うのもあるのですか・・・ また一つ勉強させていただきました。 それにご丁寧にソースまで頂いて・・・本当に有難う御座います。 硬い頭がほんの少し柔らかくなったかもしれません。 ありがとうございます!
- yambejp
- ベストアンサー率51% (3827/7415)
>毎日ランダムで変わる処理 ではなく、とりあえず配列に納めればよいのですか? <? $file_name = "./text.txt"; $str=file_get_contents($file_name); foreach(preg_split("/\r\n|\n|\r/ms",$str) as $val){ $list[]=explode(",",$val); } print_r($list); ?>
お礼
ご返答有難う御座います。 >> 毎日ランダムで変わる処理 > ではなく、とりあえず配列に納めればよいのですか? 一度全て収めてから一つをランダムで選択しようと思ってたのですが 無駄でしたかね・・。 テキストの行をランダムで一つ選択して代入する方が確かに楽でしょうか・・・ 混乱してまいりました(涙
お礼
またまたご返答ありがとうございます。 確かに、私の文面では着地点が何処なのか分からない状態でした・・・ 大変失礼しました。 記述いただいたソースを参考に 調べつつやってゆこうと思います。 本当に丁寧にお教え頂いて有難う御座います。 また分からない事があれば質問させてくださいませ。