我有一个从菜单提交的数组,我必须采用子类别中的最大值,并且仅使用最高价格。随着用户添加更多项目,更新可能会发生多次。
User Scenario
:用户单击一种成分,然后单击另一种,然后单击另一种。在每次添加期间,价格都会动态更新。
子类别之一是salad greens
或ingredienttype_id = 1
。
当前代码:
$prices = $db->get_ingredient_prices($list);
$free_items = $db->get_free_ingredient_types($item);
foreach($prices as $price){
if(array_key_exists($price['ingredienttype_id'], $free_items)){
$qtyA = $free_items[$price['ingredienttype_id']];
$qtyB = $customizations[$price['id']];
if($qtyA == 0){
$qtyC = $qtyB;
} elseif($qtyA > $qtyB){
$free_items[$price['ingredienttype_id']] = $qtyA - $qtyB;
$qtyC = 0;
} elseif($qtyA < $qtyB){
$free_items[$price['ingredienttype_id']] = 0;
$qtyC = $qtyB - $qtyA;
} else {
$free_items[$price['ingredienttype_id']] = 0;
$qtyC = 0;
}
} else {
$qtyC = $customizations[$price['id']];
}
if ($qty > -1) {
$customizations_total = $customizations_total + ($price['price'] * $qtyC);
} else {
$customizations_total = $customizations_total + $price['price'];
}
}
return number_format($customizations_total,2);
现在,我必须以某种方式在此示例代码中创建我的循环。
这是尝试获取正确类别时来自foreach循环的示例输出:
$list = [4, 6, 8, 114, 98];
$prices = $db->get_ingredient_prices($list);
foreach ($prices as $k => $v) {
if ($v['ingredienttype_id'] == '1') { $greens[] = $v; }
}
样本输出:
array (size=6) [prices]
0 =>
array (size=8)
'id' => string '6' (length=1)
'name' => string 'Spinach' (length=7)
'description' => string '' (length=0)
'price' => string '0.69' (length=1)
'ingredienttype_id' => string '1' (length=1)
'active' => string '1' (length=1)
'nutritionix_id' => string '529e7dd1f9655f6d35001d40' (length=24)
'nutritionix_cal' => string '55' (length=2)
1 =>
array (size=8)
'id' => string '8' (length=1)
'name' => string 'Kale' (length=4)
'description' => string 'Local' (length=5)
'price' => string '0' (length=1)
'ingredienttype_id' => string '1' (length=1)
'active' => string '1' (length=1)
'nutritionix_id' => string '529e7dd1ea63d49335001d48' (length=24)
'nutritionix_cal' => string '71' (length=2)
2 =>
array (size=8)
'id' => string '4' (length=1)
'name' => string 'Bleu Cheese' (length=11)
'description' => string '' (length=0)
'price' => string '0.69' (length=4)
'ingredienttype_id' => string '7' (length=1)
'active' => string '1' (length=1)
'nutritionix_id' => string '529e7dd1ea63d49335001d42' (length=24)
'nutritionix_cal' => string '160' (length=3)
3 =>
array (size=8)
'id' => string '98' (length=2)
'name' => string 'Asian Sesame' (length=12)
'description' => string '' (length=0)
'price' => string '0.69' (length=4)
'ingredienttype_id' => string '7' (length=1)
'active' => string '1' (length=1)
'nutritionix_id' => string '529e7dd1f9655f6d35001d3d' (length=24)
'nutritionix_cal' => string '125' (length=3)
4 =>
array (size=8)
'id' => string '114' (length=3)
'name' => string 'Arugula ' (length=8)
'description' => string 'Local' (length=5)
'price' => string '0.99' (length=4)
'ingredienttype_id' => string '1' (length=1)
'active' => string '1' (length=1)
'nutritionix_id' => string '529e7dd1f9655f6d35001d24' (length=24)
'nutritionix_cal' => string '35' (length=2)
array (size=3) [greens]
0 =>
array (size=8)
'id' => string '6' (length=1)
'name' => string 'Spinach' (length=7)
'description' => string '' (length=0)
'price' => string '0.69' (length=1)
'ingredienttype_id' => string '1' (length=1)
'active' => string '1' (length=1)
'nutritionix_id' => string '529e7dd1f9655f6d35001d40' (length=24)
'nutritionix_cal' => string '55' (length=2)
1 =>
array (size=8)
'id' => string '8' (length=1)
'name' => string 'Kale' (length=4)
'description' => string 'Local' (length=5)
'price' => string '0' (length=1)
'ingredienttype_id' => string '1' (length=1)
'active' => string '1' (length=1)
'nutritionix_id' => string '529e7dd1ea63d49335001d48' (length=24)
'nutritionix_cal' => string '71' (length=2)
2 =>
array (size=8)
'id' => string '114' (length=3)
'name' => string 'Arugula ' (length=8)
'description' => string 'Local' (length=5)
'price' => string '0.99' (length=4)
'ingredienttype_id' => string '1' (length=1)
'active' => string '1' (length=1)
'nutritionix_id' => string '529e7dd1f9655f6d35001d24' (length=24)
'nutritionix_cal' => string '35' (length=2)
从果岭上,我只需要记录芝麻菜的价格,因为它是最高的。必须为每个新添加的,甚至可能要除去的芝麻菜都执行此检查。
我想在将$prices
数组添加到后将要使用多个foreach循环
$greens
数组$prices
数组,并将匹配的配料价格设置ingredienttype_id == 1
为0,同时保留max的输出。因此,我有点想通过3个foreach
循环来获得所需的结果。有更好的方法还是这是唯一的方法?
我建议您在数据库上跟踪用户选择的成分,这将使您轻松查询总价格。
用户添加/删除成分时,您可以更新包含以下列的联接表:
selected_ingredients
(user_id, ingredient_id)
然后,您可以计算每种成分类型的最高价格:
select max(price), ingredienttype_id
from ingredients i
join selected_ingredients si on si.ingredient_id = i.id
where si.user_id = ?
group by i.ingredienttype_id
或总为
select sum(price) from (
select max(price) price, ingredienttype_id
from ingredients i
join selected_ingredients si on si.ingredient_id = i.id
where si.user_id = ?
group by i.ingredienttype_id
) t1
如果您已经在会话中跟踪选定的产品,则无需将选择记录在联接表中,而可以使用以下查询:
select sum(price) from (
select max(price) price, ingredienttype_id
from ingredients
where id in (?)
group by ingredienttype_id
) t1
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句