【问题标题】:Select a candidate based on count and percentage in PHP根据 PHP 中的计数和百分比选择候选人
【发布时间】:2019-06-13 10:10:36
【问题描述】:

我有一个广告列表,我想根据轮播(代表一个百分比)和它被查看的次数来轮播它们。可以有任意数量的广告,它们被列在一个多维数组中。每行是一个广告。每次观看,观看次数增加 +1。

$aAd[] = array('viewed' => 2003, 'rotation' => 70); // 70%
$aAd[] = array('viewed' => 122, 'rotation' => 30); // 30%

我正在研究如何根据轮播和查看次数来选择下一个要展示的广告。有没有人能用公式来帮助做到这一点?

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

【问题讨论】:

  • 请澄清您的问题。首先 $aAds 是 2 次,它们是 2 个单独的广告吗?而且我认为您应该使用对象而不是数组,而且您还谈论百分比,那么它在哪里?
  • 谢谢,我已经更新了问题...
  • 您想轮播广告是否意味着将轮播值(也是百分比)增加 1。
  • 每查看一次,查看次数增加+1
  • 当前查看的是哪一个?数组中的第一个? “旋转”有什么作用?从数组中选择一个并将其移动到第一个位置?还是数组中的顺序从未改变?是否可以连续选择两次?

标签: php percentage


【解决方案1】:

你可以使用这个功能:

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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-26
    • 2017-03-22
    相关资源
    最近更新 更多