Показывать только рекламу, ближайшую к случайному числу - PullRequest
1 голос
/ 28 сентября 2019

Я получил это, где я хочу отображать только одно объявление, но в случайном порядке, и оно имеет больше изменений отображения, если бюджет выше.Это мой код прямо сейчас:

У меня уже есть часть, где он рассчитывает процент от 100% с большим количеством десятичных знаков, но я теряюсь при попытке отобразить рекламу с рассчитанным процентом и показать только ОДНУ рекламу.

Если у вас есть какие-либо вопросы или что-то подобное, не стесняйтесь спрашивать!

@php

$advertisment = DB::table('advertisment')
->orderBy('id', 'desc')
->get();

$totalbudget = 0;
$random = rand(100, 100000000000000);
$random1 = $random / 1000000000000;
echo $random1;
echo '<br><br>';


foreach ($advertisment as $ad) {
    $total = $totalbudget + $ad->budget;
    $totalbudget = $total;
}

// check what advertisment is the closest to the random number given

@endphp

1 Ответ

0 голосов
/ 28 сентября 2019

Мне кажется, я понимаю.Если у всех ваших рекламных объявлений есть бюджет, а ваш random1 представляет собой процент (1 - 100), вы можете попробовать это в своей существующей функции.Он также по-прежнему будет вычислять итоговую сумму, которую вы искали, просто используйте функцию Laravel sum() в коллекции.Обратите внимание, я переименовал коллекцию рекламы во множественное число для ясности.

$totalbudget = $advertisements->sum('budget');

$closest = null;
$closestAd = false
foreach ($advertisements as $ad) {
    // first get percentage of total for this budget:
    $thisPercent = ($ad->budget * 100) / $totalbudget;
    if ($closest === null || abs($random1 - $closest) > abs($thisPercent - $random1)) {
       $closest = $thisPercent;
       $colsestAd = $ad;
    }
}

В конце цикла у вас есть и процент ($closest), и само объявление ($closestAd), и бюджетесли хотите ($closestAd->budget).

Есть несколько неизвестных, поэтому этот код может работать не совсем точно.Пожалуйста, используйте его как руководство и настройте, чтобы он работал на вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...