shuffle()数组..正确的方法来随机化数组结果?

时间:2010-11-19 05:23:43

标签: php arrays

我想知道shuffle()数组函数是否是随机化数组结果的正确方法。

基本上,我在数组中有一些广告代码,我每次使用它来显示1个随机广告,但有一个广告似乎比任何东西都要多得多!我的意思是20次出现大约18次。我想通过随机化结果我会得到每个广告的相同观点,但事实并非如此。

这让我有疑问。是不是正确的方式来做这件事......或者我需要一些完全不同的东西吗?

以下是我一次抓取随机广告代码的代码。

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

3 个答案:

答案 0 :(得分:7)

你也可以简单地使用array_rand选择一个随机密钥,而不是改变整个事情。它不会比*更随机。基于仅20次运行,你不能说测试数据不随意。如果再运行几千次,它应该会均匀。

换句话说:

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

*至少PRNG会如此。

答案 1 :(得分:2)

随机表示随机。如果它给每个广告提供相同的观点,那就不是随机的。 shuffle()随机化数组中元素的顺序,关联或其他。如果您的目标是为数组中的每个“广告”提供相同的观看次数,那么不,shuffle()不是您所追求的。您可以编写一个使用布尔逻辑来提供相同视图的函数。

答案 2 :(得分:0)

如果您不介意运行一两个数据库查询,请将广告投放到表格中,然后创建一个列,该列将存储该广告的展示次数。使用RAND()排序的MIN(视图)选择​​行,并增加所选行的视图计数。这将确保每个广告的查看次数相同,但以随机顺序显示。