2010-11-19 217 views
0

我想知道如果shuffle()數組函數是隨機化數組結果的正確方法。shuffle()數組..正確的方法來隨機化數組結果?

基本上,我在一個數組中有一些廣告代碼,我每次都會用這個來顯示一個隨機廣告,但是有一個廣告似乎比任何東西都顯得多了!我的意思是20次出現約18次。我想通過隨機分配每個廣告的平等觀點的結果,但不是這樣。

這讓我質疑這裏。洗牌正確的方式來做到這一點..還是我需要完全不同的東西?

這裏是我一次抓取隨機廣告代碼的代碼。

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

有道理..我想我應該先讓它跑上千印。感謝您糾正我 – 2010-11-19 05:38:37

+0

無償迪爾伯特+1。 :) – Alex 2010-11-19 05:48:58

0

如果你不介意運行的數據庫查詢或兩個的打,摔廣告到一個表,並創建一個將存儲的廣告多少次顯示的列。選擇由RAND()排序的具有MIN(視圖)的行並增加所選行的視圖計數。這將確保每個廣告的瀏覽次數相同,但以隨機順序顯示。

+0

該解決方案看起來不錯,只是我真的不想使用數據庫,我不想要完全平等的意見無論是..意見差異是巨大的,這就是爲什麼我質疑,如果洗牌是不同於array_rand例如 – 2010-11-19 05:42:06

2

隨機意味着隨機。如果它對每個廣告給出相同的觀點,那麼它就不是隨機的。 shuffle()隨機化數組中元素的順序,關聯或其他。如果您的目標是爲陣列中的每個「廣告」提供相同的視圖,那麼不會,shuffle()不是您之後的事情。你或許可以編寫一個使用布爾邏輯的函數來賦予相同的視圖。