1

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

使用 PHP 的最佳方法是什么?

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

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

4

3 回答 3

1

实际上,这不是关于 PHP,而是更多关于执行它的策略。

如果您需要它恰好出现在 1% 的视图中,您可以在 Redis 或 Memcached 或数据库中使用计数器。- 如果您的目标是准确控制视图数量,那就太好了。- 注意。如果您使用 Redis 或 Mamcached,您的计数器将在服务器或服务重新启动后重置。

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

于 2013-05-16T14:36:41.913 回答
0

鉴于此声明,我不会寻求 rand 解决方案:

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

您可能永远无法从 rand(0,100) 获得 99。

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

于 2013-05-16T14:38:24.597 回答
0

我在我开发的网站上做了类似的事情,并且效果很好。PHP 是服务器端,因此它与您将获得的一样可靠。我会这样做:

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

// pure html content here

<?php endif ?>

编辑:

概率的本质意味着给定足够大的样本mt_rand(1, 100)将在 1% 的时间内生成您正在寻找的数字匹配。您可以使用精美的数据库或平面文件来强制赔率,但这是不必要的,因为您只需要相信mersenne twister它确实会正确生成您的赔率。

于 2013-05-16T14:34:40.647 回答