- ベストアンサー
ランダムの比較について
今ランダムで数字を選ぶプログラムを作っています。 4つの変数に全て異なる数字を入れたいのですが どうやって比較をすれば良いのか分かりません。 while(true){ $rd1 = rand(0,30); $rd2 = rand(0,30); if($rd1 != $rd2){ break; } } 一応二つの比較ならこれで良いのかと思うのですが 3つ以上になった場合にどういう風にすれば良いのか教えてください。 どうぞよろしくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
変数に入れてから array_rand でとるのがスマートかも知れません。 # 入れる数字の設定。1~いくつまで。 $num = 30; # 配列初期設定 $numbers = array(); # 配列に格納。 for($i=1;$i<=$num;$i++) { array_push($numbers,$i); } # 変数の数 $h_num = 4; $h_number = array_rand($numbers,$h_num); # 表示。 for($i=0;$i<=$h_num;$i++) { print $numbers[$h_number[$i]] ."<br>\n"; }
その他の回答 (2)
- GuruGuru22
- ベストアンサー率51% (177/346)
私は1個ずつ配列に入れてく。 $ary = array(); while (count($ary) < 4){ $r = rand(0,30); if (!in_array($r,$ary)){ $ary[] = $r; } } print_r($ary);
お礼
やはり配列が良いみたいですね! こういう配列の使い方があるんだと勉強させられました。 ありがとう御座いました。
- tripod_r
- ベストアンサー率38% (5/13)
少し強引ですが下記の方法でどうでしょうか。 (一応無限ループ対策付です。) <? srand((double)microtime()*1000000); $rd1 = rand(0,30); $rd2 = rand(0,30); $rd3 = rand(0,30); $rd4 = rand(0,30); $i=0; while($rd1==$rd2){ $rd2 = rand(0,30); $i++; if($i==100){print "error";exit;} } $i=0; while(($rd1==$rd3)||($rd2==$rd3)){ $rd3 = rand(0,30); $i++; if($i==100){print "error";exit;} } $i=0; while(($rd1==$rd4)||($rd2==$rd4)||($rd3==$rd4)){ $rd4 = rand(0,30); $i++; if($i==100){print "error";exit;} } print "$rd1<br>"; print "$rd2<br>"; print "$rd3<br>"; print "$rd4<br>"; ?> もしかしたら他にシンプルで良い物が有るかも.....
お礼
早速のお応えありがとう御座います(^^) 私も似たような方法は考えたのですが、 コードが長くなってスマートじゃないなと思ったのです。
お礼
なるほど!配列を使うという方法がありましたね。 これなら重複することはありませんね! ありがとう御座います。