我有横幅广告,有多个观点,比如CPM系统.
例如:
i have 3 banner:
banner1 with 20.000 nr of views
banner2 with 10.000 nr of views
banner3 with 5.000 nr of views
在我的网站上,横幅必须出现在此位置(重新加载页面时):
banner1 banner2 banner1 banner2 banner3
如果观看次数较多,那么幻影的概率就会更高
我怎么能在PHP中这样做?
解决方法:
首先,你的系统只是……愚蠢.它使具有大量视图的横幅永久化,而新创建的具有0或几个视图的横幅永远不会有机会被挑选,因此永远不会被实际看到…
话虽这么说,如果你有一个看起来像这样的数组:
$banners = array
(
'banner1' => 1,
'banner2' => 2,
'banner3' => 4,
'banner4' => 8,
'banner5' => 16,
);
你可以使用像这样的函数来称重选择一个横幅:
function Probability($data)
{
if (is_array($data) === true) {
$result = 0;
$probability = mt_rand(1, array_sum($data));
foreach ($data as $key => $value) {
$result += $value;
if ($result >= $probability) {
return $key;
}
}
}
return false;
}
用法(测试@ CodePad.org或@ IDEOne):
echo Probability($banners); // banner5
来自100次执行的样本:
Array
(
[banner5] => 41
[banner4] => 38
[banner3] => 10
[banner2] => 8
[banner1] => 3
)