Во-первых, вы можете рассказать, что происходит здесь (и что получается на данном этапе):
$regular_discount = DiscountRegular::calculateDiscount();
$result = preg_replace("/\..+/", "", $regular_discount);
Во-вторых, если брать ваше условие:
если в покупателя общая сумма оплачена 250 или больше тогда ему % скидки будет 20% а если больше 351 или равно тогда 10% условие я сделал такое
то, каким образом
хоть и указанна сума покупок 351 скидка на 250 не работает
это должно примениться? Ваше условие говорит однозначно - скидка = 20%, при 250<=сумма<351; скидка = 10%, при сумме>=351. Т.е., кмк, вы неправильно сформулировали задачу.
p.s.
Ну, и, в-третьих: а данные у вас все в строках хранятся в бд? (какой тип полей?) Если нет, то почему сразу не выполнить общий запрос вида
SELECT dr0_.sum AS percentage, dr0_.price as minOrderSum FROM DiscountRegular AS dr0_ WHERE dr0_.active = 1 AND dr0_.start_date >= CURRENT_TIMESTAMP() AND dr0_.end_date < CURRENT_TIMESTAMP() AND dr0_.price >= ?сумма_заказа
Естественно перенеся его на вашу ORM, используемую в проекте. А затем:
$applicableDiscounts = $queryResults; //результаты запроса выше
$currentPercentage = 0;
$prevMinOrderSum = 0; //нужно для запоминания текущих границ скидки, чтобы не применялась тупо последняя выбранная из бд скидка
foreach ($applicableDiscounts as $discountData) {
if ($price >= $discountData['minOrderSum'] && $discountData['minOrderSum'] > $prevMinOrderSum) { //где $price - сумма вашего заказа
$currentPercentage = $discountData['percentage'];
$prevMinOrderSum = $discountData['minOrderSum'];
}
}
$finalPrice = $price * (1 - $currentPercentage / 100);