こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

【PHP】phpで毎日ランダムで変わる処理

こんばんは。

タイトル通り、PHPで24時間毎(毎日)変わる文面を作れないかと思い記述しているのですが
入り口で足が止まったので質問させて頂きました。

仕様としては
外部のテキストファイル(カンマ区切り)を読み込み配列として代入。
その中から日替わりランダムで表示したいと考えています。

実験として下記の内容を記述してみた所・・・

[test.txt内容]計2行
abd,def,ghi,jkl
mno,pqr,stu,vwx

<?php
$file_name = file_get_contents("./test.txt");
$list = explode(",","$file_name");
?>

HTMLで出力してみた所、カンマ区切りで変数には代入出来ているみたいなのですが
<?= $list[0] ?><br>
<?= $list[1] ?><br>
<?= $list[2] ?><br>
<?= $list[3] ?><br>
<?= $list[4] ?><br>・・・
の形になります。

改行毎に、
$list[0][0] = abd;
$list[0][1] = def;
$list[0][2] = ghi;
$list[0][3] = jkl;
$list[1][1] = mno;
$list[1][2] = pqr;
$list[1][2] = stu;
$list[1][3] = vwx;

の様に代入したいのですがどの様な記述を行えば宜しいでしょうか。

頭が固く、とても低レベルな質問かと思いますが
何卒、よろしくお願い致します。

投稿日時 - 2010-11-22 03:06:13

QNo.6335579

困ってます

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

>無駄でしたかね・・。

いえそうではなく、質問の命題と例示がことなっていたのでどういう結果がほしいのか
迷ったもので・・・、まぁ行ごとにデータ行の順列通りに、行の要素を日ごとに
ランダムにするのであれば、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);
?>

投稿日時 - 2010-11-22 13:39:50

お礼

またまたご返答ありがとうございます。

確かに、私の文面では着地点が何処なのか分からない状態でした・・・
大変失礼しました。

記述いただいたソースを参考に
調べつつやってゆこうと思います。

本当に丁寧にお教え頂いて有難う御座います。
また分からない事があれば質問させてくださいませ。

投稿日時 - 2010-11-23 02:29:19

ANo.2

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

とりあえず、答えは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);

投稿日時 - 2010-11-22 14:20:12

お礼

ご返答有難う御座います。

>> $list[3]の内容は 「jkl[改行]mno」っていう、予想していないものになってしまっているかと思います。
確かに。。。おっしゃる通りの結果になっております・・・(涙

file()と言うのもあるのですか・・・
また一つ勉強させていただきました。
それにご丁寧にソースまで頂いて・・・本当に有難う御座います。

硬い頭がほんの少し柔らかくなったかもしれません。
ありがとうございます!

投稿日時 - 2010-11-23 02:32:17

ANo.1

>毎日ランダムで変わる処理

ではなく、とりあえず配列に納めればよいのですか?

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

投稿日時 - 2010-11-22 10:01:24

お礼

ご返答有難う御座います。

>> 毎日ランダムで変わる処理
> ではなく、とりあえず配列に納めればよいのですか?

一度全て収めてから一つをランダムで選択しようと思ってたのですが
無駄でしたかね・・。

テキストの行をランダムで一つ選択して代入する方が確かに楽でしょうか・・・

混乱してまいりました(涙

投稿日時 - 2010-11-22 13:10:49

あなたにオススメの質問