У меня есть своего рода магазин, где члены лыжного клуба могут арендовать оборудование. Первым шагом является цикл, в котором член может делать повторяющиеся выборы, например, для него и его семьи. Каждая строка материала имеет свою общую сумму с общей суммой в нижней части. Проблема возникает, когда последняя аренда была сделана, и участник хочет завершить свой платеж. Линия последнего арендованного оборудования удваивается, и в результате общая сумма ложна. Идея, как это решить. Я думаю, что это имеет какое-то отношение к моей инструкции UNSET. Спасибо за помощь. Вот код моих циклов foreach:
foreach ($price as $key => $value) { $number[$key] = str_pad($number[$key], 2); $type[$key] = str_pad($type[$key], 21); $lenght[$key] = str_pad($lenght[$key], 15); $boots[$key] = str_pad($boots[$key], 22); $size[$key] = str_pad($size[$key], 15); $priceskipers[$key] = ($priceski[$key]) * ($person[$key]); $pricebootspers[$key] = ($priceboots[$key]) * ($person[$key]); $total[$key] = array_sum(array($priceskipers[$key], $pricebootspers[$key])); $supertotal = 0; $id++; echo "<pre>Data : " .$date[$key] . " | " . $number[$key] . " / " . $person[$key] . "| " . $type[$key] . " | " . $lenght[$key] . " | " . $boots[$key] . " | " . $size[$key] . "<br> " . $priceskipers[$key] . " + " . $pricebootspers[$key] . " = " . $total[$key] . " for this reservation (id" . $id . ").<hr></pre>"; unset($value); foreach ($total as $key2 => $value2) { $supertotal += $total[$key2]; $discount = (($supertotal) * 0.2); $grandtotal = (($supertotal) - ($discount)); } } echo "<pre><b>Total " . $supertotal . " - 20% (discount for online renting) " . $discount . " = " . $grandtotal . ", your net amount.</b></pre>";
Прежде всего, лучше вам следует полностью предоставить каждую из ваших реальных входных переменных, чтобы сообщество могло легче имитировать.
Даже код выше не был правильным, но он все еще работает. Нет смысла для вызова unset()
чтобы перейти сюда.
Затем, немного рефакторинга, переместите последний блок foreach
из основного цикла: # 1
foreach ($price as $key => $value) { //old logic } foreach ($total as $key2 => $value2) { $supertotal += $total[$key2]; $discount = (($supertotal) * 0.2); $grandtotal = (($supertotal) - ($discount)); }
Затем вы можете удалить весь расчет в цикле foreach
из # 1:
$superTotal = array_sum($total); $discount = $superTotal * 0.2; $grandTotal = $superTotal - $discount;
Наконец, ваш комментарий о том, когда после того, как пользователь нажмет на кнопку оплаты, тогда все будет нарушено, это значит, что расчет затем полностью зависит от того, как событие после click on pay button
.