0

我想知道是否有人可以帮我一点忙。我有一个循环遍历购物车的内容。我希望对购买的其他商品应用 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;
4

3 回答 3

5

这是我的做法:

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

这个怎么运作:

  1. 价格在他们自己的数组中被拉出——我更喜欢这个,因为折扣代码不会与“正常”价格混淆,这可能会导致意想不到的并发症。
  2. 对价格数组进行迭代,除第一个元素之外的每个元素都设置为其值的 75%。
  3. 总价只是折扣价的总和。

此代码依赖于array_column,仅从 PHP 5.5 开始可用。对于早期版本,您可以从这里获取一个实现或替换它:

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

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

$discount = .25;
array_walk(
    $prices,
    function(&$price, $i) use($discount) { if($i) $price *= (1 - $discount); }
);
于 2013-06-20T14:50:25.737 回答
0
for($Loop = 0; $Loop < count($Cart); $Loop++){

    if($Loop > 0) {
        $Total += ($Cart[$Loop]['Price']*0.75);  
    } else {
        $Total += $Cart[$Loop]['Price'];
    }
}
于 2013-06-20T14:50:59.313 回答
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];
    }
}
于 2013-06-20T14:52:13.663 回答