从循环中的多个项目中扣除25%

时间:2013-06-20 14:47:21

标签: php

我想知道是否有人能帮助我一点点。我有一个循环遍历购物车的内容。我希望对购买的其他商品享受25%的折扣。所以基本上第一项是全价,其他项目减少了25%。我尝试了各种各样的方法,但我似乎得到的是折扣适用于全部或全部。

如果我删除if语句及其内容因此不希望应用折扣,则下面的循环可以正常工作。目前的情况是它根本没有增加折扣。如果我删除if条件并使用它的内容,那么它将对所有项目应用25%的折扣。

for($Loop = 0; $Loop < count($Cart); $Loop++)
{
    $Total += $ShoppingCart[$Loop][Price];

    if($Loop > 1) {
        $Total += $ShoppingCart[$Loop][Price];
    $PercentageAmount = 25;
    $TotalPrice = $TotalPrice * ((100-$PercentageAmount) / 100);    
    }
}

编辑:

不幸的是,没有一个答案,虽然技术上可能不错,但不能解决我的问题。我必须导致在循环中放置2个if语句,然后计算它们的总计。不是一个理想的解决方案,但完美无缺。不知怎的,我需要它的排序,所以最昂贵的项目是全价。如果我不依赖于以这种方式使用循环而是可以使用数组函数,那将会容易得多。

$i = 0; 
for($Loop = 0; $Loop < count($Cart); $Loop++)
{
    if($i == 0) {
        $Total += $ShoppingCart[$Loop][Price];
    }                               
    if($i > 0) {
        $TotalMulti += $ShoppingCart[$Loop][Price];
        $TotalMulti = $TotalMulti * .75;    
    }
    $i++;
}
$NewTotal = $Total + $TotalMulti;

3 个答案:

答案 0 :(得分:5)

我将如何做到这一点:

$prices = array_column($ShoppingCart, 'Price');
array_walk($prices, function(&$price, $i) { if($i) $price *= .75; });
$total = array_sum($prices);

工作原理:

  1. 价格是在他们自己的阵列中拉出来的 - 我更喜欢这个,因为折扣代码没有弄乱“正常”价格,这可能会导致意外的并发症。
  2. 迭代价格数组,除第一个元素之外的每个元素都设置为其价值的75%。
  3. 总价格只是折扣价的总和。
  4. 此代码依赖于array_column,它仅从PHP 5.5开始提供。对于早期版本,您可以从here获取实现或替换为:

    $prices = array_map(function($el) { return $el['Price']; }, $ShoppingCart);
    

    如果折扣百分比是变量,您还需要进行此修改:

    $discount = .25;
    array_walk(
        $prices,
        function(&$price, $i) use($discount) { if($i) $price *= (1 - $discount); }
    );
    

答案 1 :(得分:0)

for($Loop = 0; $Loop < count($Cart); $Loop++){

    if($Loop > 0) {
        $Total += ($Cart[$Loop]['Price']*0.75);  
    } else {
        $Total += $Cart[$Loop]['Price'];
    }
}

答案 2 :(得分:0)

希望这会有所帮助:

for($Loop = 0; $Loop < count($Cart); $Loop++)
{
    # if not first item then discount price
    if($Loop > 1) {
        $PercentageAmount = 25;
        # grab the price
        $itemPrice = $ShoppingCart[$Loop][Price];
        # what should the user pay? 
        $itemDiscountPrice = $itemPrice * (100.0 - $PercentageAmount) / 100.0
        # add it to total
        $Total += $itemDiscountPrice;
    } else {
        # if first item -> full price
        $Total += $ShoppingCart[$Loop][Price];
    }
}