php - PHP按数量范围价格计算定价
问题描述
我有一种情况,我需要根据数量范围计算产品价格,这里是我的价格范围逻辑
我有不同的价格等级
50 - 200 为 1/50 美元 250 - 500 为 0.75 美元/50 美元 550 - 1000 为 0.5/50 美元
因此,如果有人订购 1,000 件,前 200 件将按 1/50 美元(4 美元)计算,然后从 250 到 500 美元将是 0.75 美元/50 美元,因此(4.5 美元)然后从 550 到 1000 美元将是 0.5 美元/50 美元,因此(5 美元)总计: 4 + 4.5 + 5 = 13.5 美元
在 PHP 管理员中,我在 textarea 中输入以下格式的类(这种格式可以更容易地更改) 200|1 500|0.75 1000|0.5
我如何根据这个价格等级计算价格?
解决方案
首先,您的范围已关闭,它们都缺少 50 件
前 200 件将计算为
1 / 50
然后从 250 到 500 件,它将是.75 / 50
因此,如果您卖出 1000 件,请将其分解:
- 前 0 - 250 件将在
1 / 50
(250 - 0) * 0.02 = 5
1000 - (250 - 0) = 750
- 剩余数量为 750 件
- 接下来的 250 - 550 件将在
.75 / 50
(550 - 250) * 0.015 = 4.5
750 - (550 - 250) = 450
- 剩余数量为 450 件
- 接下来550到???件将在
.5 / 50
450 * 0.01 = 4.5
- 剩余件数为 0
使总数达到:5 + 4.5 + 4.5 = 14
function getPrice($amount) {
$prices = [
250 => 1.00 / 50,
550 => 0.75 / 50,
1000 => 0.50 / 50,
];
ksort($prices);
$total = 0.0;
$lowerbound = 0;
foreach($prices as $bound => $price) {
if ($amount < $bound) return $total + ($amount * $price);
$total += ($bound - $lowerbound) * $price;
$amount -= ($bound - $lowerbound);
$lowerbound = $bound;
}
return $total;
}
或者,您可以从上限开始计算相同的价格
function getReversedPrice($amount) {
$prices = [
0 => 1.00 / 50,
250 => 0.75 / 50,
550 => 0.50 / 50,
];
krsort($prices);
$total = 0.00;
foreach($prices as $bound => $price) {
if ($amount < $bound) continue;
$total += ($amount - $bound) * $price;
$amount -= ($amount - $bound);
}
return $total;
}
推荐阅读
- python - Flask:在 Travis 上运行时找不到模板
- shiny - 如何使用 Shiny 在传单地图上映射一系列值?
- mysql - 增量值取决于另一个
- tcp - 中文tracker TCP帧解码
- python-3.x - 使用散景滑块过滤绘图上的数据
- php - 我如何使用 laravel 获得今天、过去 7 天和过去 30 天的利润
- jquery - 使用 JQuery 编写新的 HTML 会禁用弹出框
- java - 我如何知道从哪个类异常扩展?
- blockchain - Solidity 函数在 remix 中返回 true,但在 web3 函数调用中返回 false
- powershell - 通过 Windows 任务调度器打开缩放并开始会议