只显示最接近随机数的广告

时间:2019-09-28 14:59:41

标签: php laravel

我在这里只想显示一个广告,却随机显示,如果预算较高,它的显示会有更多变化。这是我现在的代码:

我已经有一部分可以从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 :(得分:0)

我想我明白。如果您所有的广告都有预算,并且您的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)。

有一些未知数,因此此代码可能无法完全正常工作。请使用它作为指南,并进行调整以使其适合您。