首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PHP中根据计数和百分比选择候选人

问在PHP中根据计数和百分比选择候选人
EN

Stack Overflow用户
提问于 2019-01-19 17:57:44
回答 1查看 88关注 0票数 0

我有一个广告列表,我想轮换他们的旋转(这代表一个百分比)和它被观看的次数。可以有任意数量的广告,并且它们列在一个多维数组中。每一行都是一个广告。每次查看时,查看次数增加+1。

代码语言:javascript
复制
$aAd[] = array('viewed' => 2003, 'rotation' => 70); // 70%
$aAd[] = array('viewed' => 122, 'rotation' => 30); // 30%

我正在努力解决如何选择下一个广告显示的基础上的旋转和它已被观看的次数。有没有人能帮助解决这个问题呢?

算法需要选择要显示的下一个,它应该根据它被查看的次数和它应该被查看的百分比(旋转)来选择它。广告的顺序目前没有任何特定的顺序。旋转表示客户想要显示的广告的期望百分比。在这个例子中,只要轮换等于70/30,一个广告连续被挑选两次就可以了。请记住,可以有任意数量的广告,它们也可以分配不同的旋转。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-19 19:01:21

您可以使用此函数:

代码语言:javascript
复制
function getNextAdIndex($aAd) {
    $scores = array_map(function ($ad) { return $ad["viewed"] / $ad["rotation"]; }, $aAd);
    return array_search(min($scores), $scores);
}

它返回$aAd中的索引,与理想情况下的索引相比,该索引具有的视图最少(基于其旋转百分比)。

示例用法

代码语言:javascript
复制
$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
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54265927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档