我想知道shuffle()数组函数是否是随机化数组结果的正确方法。
基本上,我在数组中有一些广告代码,我每次使用它来显示1个随机广告,但有一个广告似乎比任何东西都要多得多!我的意思是20次出现大约18次。我想通过随机化结果我会得到每个广告的相同观点,但事实并非如此。
这让我有疑问。是不是正确的方式来做这件事......或者我需要一些完全不同的东西吗?
以下是我一次抓取随机广告代码的代码。
if (count($eligible_ads) > 1) {
shuffle($eligible_ads);
echo stripslashes($eligible_ads[0]['code']);
}
答案 0 :(得分:7)
你也可以简单地使用array_rand
选择一个随机密钥,而不是改变整个事情。它不会比*
更随机。基于仅20次运行,你不能说测试数据不随意。如果再运行几千次,它应该会均匀。
换句话说:
Dilbert http://img51.imageshack.us/img51/2848/dilberttourofaccounting.png
*
至少PRNG会如此。
答案 1 :(得分:2)
随机表示随机。如果它给每个广告提供相同的观点,那就不是随机的。 shuffle()
随机化数组中元素的顺序,关联或其他。如果您的目标是为数组中的每个“广告”提供相同的观看次数,那么不,shuffle()
不是您所追求的。您可以编写一个使用布尔逻辑来提供相同视图的函数。
答案 2 :(得分:0)
如果您不介意运行一两个数据库查询,请将广告投放到表格中,然后创建一个列,该列将存储该广告的展示次数。使用RAND()排序的MIN(视图)选择行,并增加所选行的视图计数。这将确保每个广告的查看次数相同,但以随机顺序显示。