我想知道是否有人能帮助我一点点。我有一个循环遍历购物车的内容。我希望对购买的其他商品享受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;
答案 0 :(得分:5)
我将如何做到这一点:
$prices = array_column($ShoppingCart, 'Price');
array_walk($prices, function(&$price, $i) { if($i) $price *= .75; });
$total = array_sum($prices);
工作原理:
此代码依赖于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];
}
}