Допустим, есть система бонусов - надо добавлять к сумме определенный процент.
Например: от 1000 - 3%, от 5000 - 5%, от 10000 - 6%.
Как только реализовать, чтобы именно нужное число скидки выбирало?
-
Пока из идей - отсортировать сумму бонусов по возрастанию и далее:
1. Проверяем самый первый элемент. Если сумма меньше его значения бонуса - завершаем работу без бонуса.
2. Проверяем последний элемент. Если сумма больше его значения суммы бонуса - выставляем его.
3. Если сумма проходит, минимум но ниже максимума:
Проверяем каждый бонус в цикле. Когда значение суммы бонуса будет выше значения скидки - берём бонус из предыдущей итерации и возвращаем.
Если кодом:
Код
if (empty($bonuses)) {
return null;
}
$firstBonus = $bonuses[0];
$lastBonus = $bonuses[array_keys($bonuses)[count($bonuses) - 1]];
$prevBonus = null;
if ($firstBonus > $paidSum) {
return null;
}
if ($paidSum >= $lastBonus) {
return $lastBonus;
}
/** @var $bonus Bonus */
foreach ($bonuses as $bonus) {
if ($bonus->sum > $paidSum) {
return $prevBonus ?: $bonus;
}
$prevBonus = $bonus;
}
return null;
Но предполагаю, что есть более тонкое решение.