2012-05-03 24 views
5

私は整数の配列を持つPHPスクリプトを持っています。これは$forbiddenとしましょう。条件付きランダム整数

$forbiddenにない1から400までのランダムな整数を取得したいとします。

もちろん、randが結果を出すときに壊れるループは望んでいません。私はより効果的なものを望みます。

どうすればよいですか?

+1

ループが効果的でないのはなぜですか? –

+0

@MichaelRobinson:禁止されている$は非常に大きい可能性があるので効果的ではありません。 Paul:配列内のすべての整数を取得してからサンプルを取得することを考えましたが、言語にもっと良いものがあるかどうか疑問に思っていました。 – Cydonia7

+0

@MichaelRobinson:理論的には禁止された数値1000000回連続して行なわれます(もし起これば、おそらく宝くじを記入してください)。しかし、ええ。 –

答えて

10

すべての禁止番号を配列に入れ、array_diffrange(1,400)から使用します。許可された数字の配列を取得し、array_rand()でランダムな数字を選択します。

<?php 

$forbidden = array(2, 3, 6, 8); 
$complete = range(1,10); 
$allowed = array_diff($complete, $forbidden); 

echo $allowed[array_rand($allowed)]; 

あなたが選択セットから除外数字を除去し、ループの必要性を無効化している:)

+0

私はarray_diffを知らず、しばらくそれを探していました!答えてくれてありがとう。 – Cydonia7

0

この方法では許さ数字の配列を生成します。この配列の番号を調べてください。それらのうちの1つをランダムに選択します。