我有一个广告列表,我想轮换他们的旋转(这代表一个百分比)和它被观看的次数。可以有任意数量的广告,并且它们列在一个多维数组中。每一行都是一个广告。每次查看时,查看次数增加+1。
$aAd[] = array('viewed' => 2003, 'rotation' => 70); // 70%
$aAd[] = array('viewed' => 122, 'rotation' => 30); // 30%我正在努力解决如何选择下一个广告显示的基础上的旋转和它已被观看的次数。有没有人能帮助解决这个问题呢?
算法需要选择要显示的下一个,它应该根据它被查看的次数和它应该被查看的百分比(旋转)来选择它。广告的顺序目前没有任何特定的顺序。旋转表示客户想要显示的广告的期望百分比。在这个例子中,只要轮换等于70/30,一个广告连续被挑选两次就可以了。请记住,可以有任意数量的广告,它们也可以分配不同的旋转。
发布于 2019-01-19 19:01:21
您可以使用此函数:
function getNextAdIndex($aAd) {
$scores = array_map(function ($ad) { return $ad["viewed"] / $ad["rotation"]; }, $aAd);
return array_search(min($scores), $scores);
}它返回$aAd中的索引,与理想情况下的索引相比,该索引具有的视图最少(基于其旋转百分比)。
示例用法
$aAd[] = array('viewed' => 0, 'rotation' => 70); // 70%
$aAd[] = array('viewed' => 0, 'rotation' => 30); // 30%
// Provide the next 100 views:
for ($i = 0; $i < 100; $i++) {
$j = getNextAdIndex($aAd);
echo "showing add $j\n"; // Do whatever is needed to "display" an ad here
$aAd[$j]["viewed"]++; // Increase its number of views
}https://stackoverflow.com/questions/54265927
复制相似问题