Php 以概率加载内容的最佳方式

Php 以概率加载内容的最佳方式,php,random,probability,Php,Random,Probability,我正在我的一个网站上做一些A/B测试,出于各种原因,我需要一个特定的内容出现在页面负载的1%。换句话说,如果页面被加载100次,我希望我的特殊内容出现一次 使用PHP最好的方法是什么 我可以使用rand()函数执行类似于if(rand(0,1)>=0.99){//Show content} 但是有更好或更可靠的方法吗?我在自己开发的网站上做了类似的事情,效果非常好。PHP是服务器端的,所以它的可靠性与您将得到的一样高。我会这样做: <?php if (mt_rand(1, 100) ===

我正在我的一个网站上做一些A/B测试,出于各种原因,我需要一个特定的内容出现在页面负载的1%。换句话说,如果页面被加载100次,我希望我的特殊内容出现一次

使用PHP最好的方法是什么

我可以使用rand()函数执行类似于
if(rand(0,1)>=0.99){//Show content}


但是有更好或更可靠的方法吗?

我在自己开发的网站上做了类似的事情,效果非常好。PHP是服务器端的,所以它的可靠性与您将得到的一样高。我会这样做:

<?php if (mt_rand(1, 100) === 100): ?>

// pure html content here

<?php endif ?>

//纯html内容在这里
编辑:


实用性的本质意味着,给定一个足够大的样本,
mt_rand(1100)
将在1%的时间内生成匹配的数字。你可以使用奇特的数据库或平面文件来提高赔率,但这是不必要的,因为你只需要相信
mersenne twister
,它确实能正确地生成赔率。

我在自己开发的一个网站上做了类似的事情,效果非常好。PHP是服务器端的,所以它的可靠性与您将得到的一样高。我会这样做:

<?php if (mt_rand(1, 100) === 100): ?>

// pure html content here

<?php endif ?>

//纯html内容在这里
编辑:


实用性的本质意味着,给定一个足够大的样本,
mt_rand(1100)
将在1%的时间内生成匹配的数字。您可以使用奇特的数据库或平面文件来提高赔率,但这是不必要的,因为您只需要相信
mersenne twister
,它确实可以正确地生成赔率。

实际上,这与PHP无关,而更多的是关于这样做的策略

如果需要在1%的视图中精确显示,可以将计数器与Redis或Memcached一起使用,也可以在数据库中使用。 -如果您的目标是精确控制视图数量,那么这很好。 -注意。如果您使用Redis或Mamcached,则在服务器或服务重新启动后,计数器将重置

您对rand()的建议也同样适用,但接近1%,但不是精确的1%。实际上,从长远来看,它将接近1%。 -更快,因为不需要访问redis/memcached/database;
-将更随机地出现,不完全是每100次查看。

事实上,这不是关于PHP,而是关于执行策略

如果需要在1%的视图中精确显示,可以将计数器与Redis或Memcached一起使用,也可以在数据库中使用。 -如果您的目标是精确控制视图数量,那么这很好。 -注意。如果您使用Redis或Mamcached,则在服务器或服务重新启动后,计数器将重置

您对rand()的建议也同样适用,但接近1%,但不是精确的1%。实际上,从长远来看,它将接近1%。 -更快,因为不需要访问redis/memcached/database;
-将更随机地出现,而不是每100次查看一次。

鉴于以下陈述,我不会选择兰德解决方案:

换句话说,如果页面被加载100次,我希望我的特殊内容出现一次

你可能永远无法从兰特(0100)那里得到99英镑


用一列创建一个非常简单的数据库表-
计数器-
,并在每次点击时更新它。每次计数器达到100的倍数时都包含一段代码。

鉴于以下陈述,我不会选择兰德解决方案:

换句话说,如果页面被加载100次,我希望我的特殊内容出现一次

你可能永远无法从兰特(0100)那里得到99英镑


用一列创建一个非常简单的数据库表-
计数器-
,并在每次点击时更新它。每次计数器点击100的倍数时都包含代码。

换句话说,如果页面加载100次,我希望我的特殊内容出现一次。
在您的情况下,它只是随机的。。它可以多次显示特殊内容,因此,在100次加载中,它最多只能加载1次?这是所有加载还是每个IP加载?我不知道,这不是问题:)
换句话说,如果页面加载100次,我希望我的特殊内容出现一次。
在你的情况下,它只是随机的。。它可以多次显示特殊内容,因此,在100次加载中,它最多只能加载1次?这是所有负载还是每个IP的负载?我不知道,这不是问题:)