電子書籍の厳選無料作品が豊富!

PHP Version 5.1.6を使っています。
例えば、1から10まで整数の中から値が重複しないように
ランダムに8個選びたいような時で、自分が思いつた選び方は、

for($i=0; $i<8; $i++){
$r = rand(1, 10);
$flag = false;
for($j=0; $j<Count($list); $j++){
if($r == $list[$j]){
$flag = true;
break;
}
}
if($flag){
$i--;
continue;
}
$list[] = $r;
}
print_r($list);

なんですが、これだと効率が悪いような気がします・・・
そこで重複しないようにランダムに選べる乱数や
またはそういう関数はあるのでしょうか?

A 回答 (3件)

>shuffleの中身(実装)は大体でいいのでどのようになってるか



質問の意図がよくわかりません。
以下参考にしてください。

http://www.php.net/manual/ja/function.shuffle.php
http://www.php.net/manual/ja/function.srand.php
    • good
    • 0

配列をつかって乱数をえるなら普通はshuffle()とかじゃないですかね?


一応ランダマイズをした方がよいのでsrand()など併用します。
8個だけ活かすなら配列のケツ2つをunsetしたりで十分かなぁ・・・

<?PHP
$array = range(1, 10);
srand((float)microtime() * 1000000);
shuffle($array);
unset($array[8],$array[9]);
print_r($array);

?>
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
なるほど、shuffleなら似たようなことができますね。
ところでshuffleの中身(実装)は大体でいいのでどのようになってるか分かりますか?

お礼日時:2007/06/17 03:44

>そこで重複しないようにランダムに選べる乱数や


00, 11, 22, 33, .., 99 を除いた 2桁の数 01 ~ 98 の中からランダムに数字を選んで、10の位と 1の位を取ればいいのでは?

# もちろん rand() 関数が十分ランダムである必要がありますが
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!