Мне кажется, я понимаю.Если у всех ваших рекламных объявлений есть бюджет, а ваш 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
).
Есть несколько неизвестных, поэтому этот код может работать не совсем точно.Пожалуйста, используйте его как руководство и настройте, чтобы он работал на вас.