• ベストアンサー

ランダムの比較について

今ランダムで数字を選ぶプログラムを作っています。 4つの変数に全て異なる数字を入れたいのですが どうやって比較をすれば良いのか分かりません。 while(true){ $rd1 = rand(0,30); $rd2 = rand(0,30); if($rd1 != $rd2){ break; } } 一応二つの比較ならこれで良いのかと思うのですが 3つ以上になった場合にどういう風にすれば良いのか教えてください。 どうぞよろしくお願い致します。

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

  • ベストアンサー
  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.2

変数に入れてから 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"; }

参考URL:
http://search.net-newbie.com/php/function.array-rand.html
shimayu
質問者

お礼

なるほど!配列を使うという方法がありましたね。 これなら重複することはありませんね! ありがとう御座います。

その他の回答 (2)

回答No.3

私は1個ずつ配列に入れてく。 $ary = array(); while (count($ary) < 4){  $r = rand(0,30);  if (!in_array($r,$ary)){   $ary[] = $r;  } } print_r($ary);

shimayu
質問者

お礼

やはり配列が良いみたいですね! こういう配列の使い方があるんだと勉強させられました。 ありがとう御座いました。

  • tripod_r
  • ベストアンサー率38% (5/13)
回答No.1

少し強引ですが下記の方法でどうでしょうか。 (一応無限ループ対策付です。) <? 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>"; ?> もしかしたら他にシンプルで良い物が有るかも.....

shimayu
質問者

お礼

早速のお応えありがとう御座います(^^) 私も似たような方法は考えたのですが、 コードが長くなってスマートじゃないなと思ったのです。

関連するQ&A