Php 将数量与最接近的折扣金额匹配

Php 将数量与最接近的折扣金额匹配,php,Php,我正在开发一个购物车,需要找到一种方法使折扣率与数量相匹配。 折扣率适用于 1项 2项(5%折扣) 5项(10%折扣) 10件(20%折扣) 因此,2-4件商品将获得2件商品的折扣,5-9件商品将获得5件商品的折扣。超过10件商品将获得10件商品的折扣 假设客户购买了7件物品。代码需要对5个项目应用折扣率。 我考虑了一个for循环,它会自动增加for的值(inti=0;I折扣的结果1=>0,2=>5,5=>10,10=>20。但是可能有更好的方法,我如何使用这些数据来格式化您的代码?这就是

我正在开发一个购物车,需要找到一种方法使折扣率与数量相匹配。

折扣率适用于

  • 1项
  • 2项(5%折扣)
  • 5项(10%折扣)
  • 10件(20%折扣)
因此,2-4件商品将获得2件商品的折扣,5-9件商品将获得5件商品的折扣。超过10件商品将获得10件商品的折扣

假设客户购买了7件物品。代码需要对5个项目应用折扣率。


我考虑了一个for循环,它会自动增加for的值
(inti=0;I<5;I++)
;我不知道如何将贴现率与之联系起来,并以正确的贴现率停止变量


我还看到了这样的代码<代码>(数量*单位成本)-(int(数量/2)*(单位成本/2)),它只对每秒钟的项目应用特定折扣,因此不起作用


我在谷歌上搜索了这个,但一直看到如何在特定购物车上进行数量折扣的例子

$quantity = quantity of items in cart
如果有一种方法可以将折扣设置为一个数组,并以这种方式匹配最接近的,那就是最佳场景,除非有人知道更好的方法

$discount = array();
$Discount[1] = 0 percent
$Discount[2] = 5 percent
$Discount[5] = 10 percent
$Discount[10] = 20 percent
我以这些折扣为例。折扣实际上是从产品数据库中提取的,因为不同的商品可以有不同的折扣率


我希望我能展示一个部分工作的代码,但是我对这个代码感到困惑。任何帮助都将不胜感激。

简单地使用if和elseif将使之变得容易

if ($quantity >= 10) {
    $discount = 20;
} elseif ($quantity >= 5) {
    $discount = 10;
} elseif ($quantity >= 2) {
    $discount = 5;
} else {$discount = 0;}
从数据库检索的动态折扣和数量也可以处理相同的逻辑

要根据您的更新使用数据库中的值执行此操作,请执行以下操作:

$input = array("1"=>"0","2"=>"5","5"=>"10","10"=>"20");
$reversed = array_reverse($input,true);

foreach ($reversed as $qtydiscount => $discount) {

    if ($quantity >= $qtydiscount) {
        break;
    }
}

echo $discount;

制作一个映射,如果这是正确的术语(我最熟悉Java),(可能被称为dict)表示边际速率的变化,然后迭代映射,直到数字超过当前键。然后返回相应的值。我考虑过了……但是实现它是一个不同的场景……哈哈。我不确定这是不是最好的方法。这就是我寻求帮助的原因。我想用一个好的方法来解决这个问题。我应该马上停止编码。哈哈。我怎么没想到会这样做……有时,因为所有的树,很容易错过森林:)我从数据库中得到了
quantity=>折扣
的结果
1=>0,2=>5,5=>10,10=>20
。但是可能有更好的方法,我如何使用这些数据来格式化您的代码?这就是我一直坚持的地方。这是我开始使用的示例代码<代码>$input=数组(“1”=>“0”、“2”=>“5”、“5”=>“10”、“10”=>“20”)$反向=数组\反向($input,true)折扣是在foreach的每次迭代中设置的。如果某个东西与相同的值匹配,如果foreach结束,那么最后设置的折扣就是您得到和使用的折扣。由于您的反向数组的最小数量为1,您至少应该始终获得零的折扣值。在这种情况下,变量作用域不起作用。