Я пытаюсь написать сценарий, который рассчитывает цену на основе количества.
База данных :
пид | продиктовать | блок | цена
1 | кокс | 100 | 2
2 | кокс | 100 | 1,8
3 | кокс | 300 | 1,5
4 | кокс | | 1,1
1 | пепси | 100 | 2,2
2 | Пепси | 50 | 2
3 | пепси | | +0,8
Pid — это идентификатор продукта, Product — название продукта / код продукта. Единица — Добавочная единица, или в дополнение к существующей единице на число, цена — цена за единицу для дополнительной единицы.
Реальные проблемы:
Я был большим поклонником For loop и break (плохое программирование), но теперь я думаю, что мне нужно либо if condition, либо while while, потому что и то, и другое не вызывает большой уверенности.
заранее спасибо
ЗаметкаЕсли вам трудно понять проблему, просто примите калькулятор подоходного налога, то же самое или аналогичное — до x суммы, базового налога, затем для NEXT y суммы, y налоговой ставки, для следующей суммы z, z налоговой ставки больше, чем z , z + налог
Ну, вы, конечно же, сначала хотите просмотреть все продукты, а затем вычислить итоговое значение, исходя из переданного количества. Как-то так?
// Using PostgreSQL as an example here
$entries = pg_fetch_all(pg_query('SELECT * FROM database ORDER BY prodict, pid ASC'));
// Have the quantities ready;
$quantities = array(
'coke' => 1024,
'pepsi' => 512,
);
// Prepare an array to hold the total values.
$totals = array();
// Loop through the entries in the array in a non-conventional way
while($entry = current($entries)) {
// Get the name of the product from the array
$product = $entry['prodict'];
// And the quantity
$quantity = $quantities[$product];
// Prepare a price for this product starting at zero
$price = 0;
// Now use a do-while to figure out the price
do {
// At this point '$entry' contains information about the pricing for the first 'x' quanitity
$quantityAtThisPrice = $entry['unit'];
// Check the price
$priceForThisUnit = $entry['price'];
// Check we have any quantity remaining of this product
if($quantity > 0) {
// Check if the quantity at this price is null or if that quantity at this price is more than what we have left
if($quantityAtThisPrice === null || $quantityAtThisPrice > $quantity) {
// This means the rest of the quantity is at this price
$price += ($quantity * $priceForThisUnit);
// No more quantity left to price
$quantity = 0;
}
// Otherwise we'll add for this unit, and move on to the next
else {
// Add to the price
$price += ($quantityAtThisPrice * $priceForThisUnit);
// Subtract the quantity we just priced
$quantity -= $quantityAtThisPrice;
}
}
// Now fetch the next entry
$entry = next($entries);
} while ($entry['prodict'] === $product);
// Add the calculated price to the totals array
$totals[$product] = $price;
}
var_dump($totals);
Немного увлекся, но я думаю, что это должно сработать.
Других решений пока нет …