

No.7ベストアンサー
- 回答日時:
ちょっとしたサンプルです。
<?php
$array = array();
for ($i = 0; $i < 20; $i++) {
$num = mt_rand(1, 100);
for ($j = 0; $j < $i; $j++) {
// 配列に格納済の乱数と一致するか?
if ($num == $array[$j]) {
break;
}
}
// 配列に格納済の乱数と一致していれば、再挑戦する
if ($j < $i) {
$i--;
continue;
}
// 初登場の数値ならば、配列に格納する
else {
$array[$i] = $num;
}
}
for ($i = 0; $i < 20; $i++) {
print $array[$i] . "<br />";
}
?>
(注)インデントのため、全角空白を使っています。
No.6
- 回答日時:
<?php
$numbers = range(1, 100);
shuffle($numbers);
for ($i = 0; $i < 20; $i++) {
echo $numbers[$i] . "<br>\n";
}
?>
参考URL:http://jp2.php.net/shuffle
No.5
- 回答日時:
いくつかのやり方がありますが、PHPならshuffle関数がありますし汎用性を考えて次の様なやり方を考えてみました。
<?php
for ($i=0; $i<100; $i++) {
$uni_rand[i] = i; // 0-99の場合。1-100にするときは、 = i を = i+1 に
}
srand(microtime()*10000000); //乱数初期化。PHP4.2.1以降は不要
shuffle($uni_rand); //0-99の$uni_randをシャッフルする
for ($i=0; $i<20; $i++) {
echo $uni_rand[i]."<br>\n"; //シャッフルした$uni_randを順に必要数表示
}
?>
No.4
- 回答日時:
$j=99;
$array = range(0,$j);
for($i=0;$i<20;$i++){
$rand = mt_rand(0,$j);
$num=$array[$rand];
$array[$rand]=$j;
$j--;
echo $num;
echo '<br>';
}
No.3
- 回答日時:
重複無し、と言う条件なら、その条件をしっかり入れるべきです。
質問者さんのスクリプトでは単にランダムで引き出しているだけですよね。こんな感じでしょうか。
<?php
$c = 0;
$a = array();
while ($c < 20) {
$num = mt_rand(0,100);
if(! array_search($num,$a)){
$a[] = $num;
$c ++;
}
}
$str = implode("<br />\n",$a);
echo $str;
?>
とりあえず配列にいれておいて、その配列の中に重複が無ければ追加します。20個でループを抜け、配列を改行キーを挟んで文字列に変換して出力しています。
No.2
- 回答日時:
私なら、まず100までの配列を用意して、それをランダムに並べ替えた後、先頭の20コを表示、というふうに作ります。
<?php
for ($i=0; $i<100; $i++) $nums[$i] = $i+1;
for ($i=0; $i<100; $i++) {
$j = mt_rand(0,99);
$tmp = $nums[$j];
$nums[$j] = $nums[$i];
$nums[$i] = $tmp;
}
for ($i=0; $i<20; $i++) {
$num = $nums[$i];
echo "$num";
echo "<br>\n";
}
?>
No.1
- 回答日時:
乱数を発生する目的を書かないと、適切なアドバイスができません。
乱数は乱数なのですから、以前に発生した乱数と同一の数字が出てくるのは、別におかしなことではありませんから。
さいころを振っても、同じ目が連続して出るのはそれほど珍しい現象ではありませんよね。
重複がいやなら、今まで発生した乱数を配列に格納しておいて、新しい乱数を発生させたときにそれと重複したら、再度乱数を発生する(手を抜くなら、単に1足すとか)ようにすればよいでしょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- UNIX・Linux 次の要件を満たすにはどのように修正したらよろしいでしょうか 1 2022/11/24 20:57
- UNIX・Linux Linuxのbash環境下です。 1 2022/11/27 12:31
- Excel(エクセル) 【Excel】指定した文字列に該当する行を重複しないようにリスト 3 2022/03/30 12:27
- PHP PHP MySql ページング 2 2022/09/20 06:38
- Excel(エクセル) ExcelVBAでリストの項目に必要数と同じ手配数を分配していくマクロを作りたいです。 1 2022/07/29 18:36
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- Visual Basic(VBA) VBA初心者です 検索した数字の行に色をつける 5 2023/02/13 14:22
- Excel(エクセル) エクセル関数の変わった使い方 3 2022/05/13 17:12
- PHP PHPで訪問回数を表示するカウンタを作成したい 3 2023/05/27 07:09
- Excel(エクセル) Excelの関数詳しい方お願いします。 13 2023/01/18 21:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHP多次元配列で重複チェック
-
$_SESSIONに二次元配列を使える...
-
ExcelVBAのチェックボックスに...
-
PHPでgrepする件について
-
【PHP】配列内のある値以上をカ...
-
PHPでビンゴプログラムを作成する
-
フォームを通さずに2次元配列の...
-
PHPの preg_grep関数(正規表現...
-
foreachのなかで次のキーを参照...
-
URLのサブドメインとドメイン部...
-
PHPにてクラスを配列にすること...
-
String だと「 ByRef引数の型が...
-
テーブルの行と列の入れ替えは可?
-
ファイルを読み込み配列にセッ...
-
配列をループでたくさん宣言し...
-
C言語の配列をPush(追加)する...
-
NGワード設定もしくはテキス...
-
Resource id #3 と表示されま...
-
複数行のデータのPOST処理に関して
-
バイナリファイルの内容を、そ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
String だと「 ByRef引数の型が...
-
配列をループでたくさん宣言し...
-
$_SESSIONに二次元配列を使える...
-
チェックボックス複数選択 mys...
-
配列一致(要素順番は違うが内容...
-
file_existsでファイル名の部分...
-
Smartyのテンプレートからjavas...
-
ネストが深い時のforeachはどう...
-
foreachのなかで次のキーを参照...
-
漢字のソートについて
-
PHPにてクラスを配列にすること...
-
ExcelVBAのチェックボックスに...
-
URLのサブドメインとドメイン部...
-
PHPのカッコ[ ]の使い方について
-
配列を回すとき、最後の要素だ...
-
PHPのPOSTでの半角スペース
-
PHPのループ数限界値について
-
$_POSTを一括してサニタイズし...
-
postgresql関数をつかったレコ...
-
ファイルから指定行数分だけ読...
おすすめ情報