2010-11-19 58 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()不是您之后的事情。你或许可以编写一个使用布尔逻辑的函数来赋予相同的视图。