首页 > 解决方案 > 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

我如何根据这个价格等级计算价格?

标签: php

解决方案


首先,您的范围已关闭,它们都缺少 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;
}

推荐阅读