2012-01-04 13 views
1

これを行うには、私のページにランダムなバナーを表示しようとしています。私に乱数を与える関数があり、数値に応じてバナーを表示するときに、ページが更新されると、同じバナーが表示されます。私は、各ページの更新時に異なるバナーを表示したいと思います。私がやっている何を...PHPの一意の乱数

function &UniqueRands($min, $max, $keys){ 
    static $returnme = array(); 
    while(in_array($x = rand($min,$max),$returnme)); 
    $returnme[] = $x; 
    if($keys < count($returnme)-1 && $keys < ($max-$min)) 
     UniqueRands($min, $max, $keys); 
    return $returnme; 
} 

$rands = &UniqueRands(1, 3, 1); 
foreach ($rands as $num) { 
    echo "$num\n"; 
} 

と私はちょうど

if ($num=1){ 
//display banner 1 
} 

を行う乱数を取得した後

を:乱数を取得するには、次のコードを使用して

イム間違っていると私は他のアイデアを聞いて満足しています。ありがとう。

+1

あなたは 'if($ num === 1)' – Paulpro

+1

と言っていると思います。 'N'バナーがあるとします。 'N + 1'リフレッシュではどうなりますか? – CanSpice

+2

これは、統計的なエラーのように聞こえる - コインを3回ひっくり返し、13%の確率で50/50の確率(.5 * .5 *)にもかかわらず3つの頭や尾が連続してしまうことになります。 5 = .125)。 '$ min'と' $ max'の範囲を増やしてみてください。 – buley

答えて

0

使用しているPHPのバージョンはどれですか? 4.2 rand()関数は自動的にシードされますが、古いものを使用している場合は、rand()関数を呼び出して乱数ジェネレータを初期化する前に、srand()関数を使用する必要があります。またはmt_rand()が役に立ちます。

2

問題同じ番号が表示されることがあるので、ページが と同じバナーが表示されるように更新すると、同じバナーが表示されます。

あなたが持っているバナーの数に応じて、それは完全に可能です。 4つのバナーがあるとします。同じ2つのバナーを連続して取得する可能性は1/4です。

実際に同じバナーを2回連続して表示したくない場合は、実際にはそれよりもランダムでなくする必要があります。クッキーなどに表示されている最後のバナーを保存し、次のバナーを選択して表示すると、そのバナーが表示されないことを確認します。

もちろん、CanSpiceによると、4つのバナーがあり、ユーザーが5ページを見ると、1つのバナーを複数回表示する必要があります。しかし、この方法を使うと、少なくとも同じバナーを2回連続して見るのをやめることができます。

+1

Appleはまったく同じ問題を抱えていました。 http://www.whatdidyoulearntoday.co.uk/post/6692906219/the-ipod-shuffle-feature-was-madeless-random-in-order-t個人的には、バナー広告に関しては、 「本当に重要ではない」と訴えて行きます。 – James

+0

4つのバナーを仮定してください:no.1を2回取得する確率は(1/4)x(1/4)、no.2を2回取得する確率は(1/4)x(1/4)などです。 (1/4)x(1/4)+(1/4)x(1/4)+(1/4)x(1/4)+(1/4)x (1/4)または1/4である。 – James

関連する問題