Выберите кандидата на основе количества и процента в PHP - PullRequest
0 голосов
/ 19 января 2019

У меня есть список объявлений, я хочу повернуть их на основе поворота (который представляет собой процент) и количества просмотров. Может быть любое количество объявлений, и они перечислены в многомерном массиве. Каждая строка - это одно объявление. Каждый раз, когда это просматривается, просмотренное увеличивается + 1.

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

Я пытаюсь определить, как выбрать следующее объявление для показа, основываясь на чередовании и количестве просмотров. Кто-нибудь может помочь с формулой, чтобы сделать это?

Алгоритм должен выбрать следующий для отображения, он должен выбирать его в зависимости от того, сколько раз он был просмотрен, и процент его просмотра (поворот). Порядок объявлений в настоящее время не в каком-либо конкретном порядке. Вращение представляет желаемый процент, в котором клиент хотел бы, чтобы реклама отображалась. Хорошо, если объявление выбирается дважды подряд, если в этом примере поворот равен 70/30. Помните, что может быть любое количество объявлений, и им также могут быть назначены разные ротации.

1 Ответ

0 голосов
/ 19 января 2019

Вы можете использовать эту функцию:

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
}
...