2010-11-19 8 views
0

shuffle()配列関数が配列結果をランダム化する正しい方法であるかどうか疑問に思っています。shuffle()array ..配列結果をランダム化する正しい方法は?

基本的には、配列に広告コードがいくつかありますが、これを使用して毎回1つのランダムな広告を表示しますが、何よりもはるかに表示される広告があります。私は約20回、約18回出現したことを意味する。私は結果をランダム化して各広告の均等なビューを得ると思っていたが、そうではない。

ここで質問させていただきます。これを行う正しい方法をシャッフルしていますか?まったく違うものが必要ですか?

ここでは、一度にランダムな広告コードを取得するためのコードです。あなたは、データベースクエリまたは2を実行しているのヒットを気にしない場合は

if (count($eligible_ads) > 1) { 
    shuffle($eligible_ads); 
    echo stripslashes($eligible_ads[0]['code']); 
} 

答えて

7

また、全体をシャッフルする代わりに、array_randを使用してランダムキーを選択することもできます。それはそれ以上ランダムではないでしょう*。わずか20回のテストに基づいてテストデータで何かがランダムではないと言うことはできません。あなたが数千回それを実行するならば、それは均等になるはずです。言い換えれば

Dilbert http://img51.imageshack.us/img51/2848/dilberttourofaccounting.png

*限りのPRNGが、少なくとも行くように。

+0

..私はそれが最初に何千人もの印象のために走らせるべきだと思う。私を訂正してくれてありがとう –

+0

+1無償のDilbertです。 :) – Alex

0

は、テーブルに広告を投げると、その広告が表示された回数を格納する列を作成します。 RAND()でMIN(ビュー)を並べた行を選択し、選択した行のビュー数を増やします。これにより、すべての広告が同じ回数表示されますが、ランダムな順序で表示されます。

+0

その解決策は素晴らしいですね。実際にはデータベースを使いたくなかったのですが、私は正確に等価なビューを望んでいませんでした。ビューの相違は巨大なものでした。なぜシャッフルがarray_randと違うか質問しました。 –

2

ランダムの意味ランダム。それは、それが各広告に等しい意見を与えた場合、ランダムではありません。 shuffle()は、配列内の要素の順序を連想またはその他の方法でランダム化します。あなたの目標が配列の各「広告」に等しいビューを与えることである場合、いいえ、shuffle()はあなたの後ろではありません。あなたはおそらく同じビューを与えるためにブール論理を使用する関数を書くことができます。

関連する問題