我有一个特定情况的菜单。有4-5个选项,客人可以选择创建他们的餐点。但是,对于这一部分,只有最高价的项目应计入总数,而不是其他部分。
价格通过AJAX更新,因此如果选择其中一个项目(通过复选框),则会自动解析所选项。
这是我的问题:
$max = 0;
foreach ($prices as $k => $v) {
if ($v['ingredienttype_id'] == '1' && $v['price'] > $max) { $max = $v['price']; }
}
foreach ($prices as $k => $v){
if ($v['ingredienttype_id'] == '1' && $v['price'] < $max){ $prices[$k]['price'] = '0'; }
}
因此,在第一个foreach
循环中,我正在检查提交的哪个项目具有最大价格,在第二个中,我将所有其他项目设置为$ 0。然而,这似乎“笨拙”并且有问题。
首先,初始项目从未注册,不会更新价格。
其次,当添加一个项目(即$ 9),然后删除并添加另一个项目(即$ 7)时,第二项不计入总数,因为$ max设置为$ 9。有没有更好的方法来处理这个我的双foreach
循环?
答案 0 :(得分:0)
为什么不重构代码以使用max()
自动生成总计?这样,你不需要将其他价格重置为0.例如,这样的东西会更具可读性:
?LARGE_LIST
请注意,我们可以将数组传递给@module_attribute
并让它返回数组中的最大值:
如果第一个且唯一的参数是数组,
$total = 0; $prices = array(); foreach( $prices as $k => $v ) { $prices[] = $v['price']; } $total+= max($prices);
将返回最高值 该数组中的值。如果提供至少两个参数,max()
返回这些值中最大的值。