首页 > 解决方案 > 按索引分组的多维数组

问题描述

我希望有人能够指导我如何最好地完成一项任务。我有一个多维数组。我需要对具有相同索引名称的数组的值进行分组和求和。这就是我所拥有的。

Array
(
[Garlic Potatoes] => 625
[Rice] => 1025
[Chicken Shawarma] => 1675
[Pita Bread Sm] => 6
[Pita Bread Large] => 14
[Beef Shawarma] => 1755
[Can of Pop] => 2
[Brioch Bun] => 2
[Chicekn Shawarama] => 135
)

我怎样才能得到一个鸡肉沙瓦玛和 qty = 1405 的实例?我需要使用foreach吗?

$sql = "SELECT menu_id, SUM(quantity) AS qty FROM daily_consumption_details WHERE consumption_id = $id GROUP BY menu_id";
$res = $conn->query($sql);

$ingredients = [];

while($menu = $res->fetch_object())
{

    $sql_ing = "SELECT item_name, quantity FROM menu_details WHERE menu_id = $menu->menu_id ";
    $rs = $conn->query($sql_ing);
    while($items = $rs->fetch_object())
    {
        $qty = $menu->qty * $items->quantity;
    
        if ( array_key_exists(trim($items->item_name), $ingredients) ) 
            $ingredients[trim($items->item_name)] = $qty + $ingredients[trim($items->item_name)];
        else 
            $ingredients[trim($items->item_name)] = $qty; 

    }


}

感谢您的反馈

标签: phparrayssortingmultidimensional-array

解决方案


如果您item_name将新成分数组的键设为键,则可以轻松检查您是否已经为该成分创建了条目

while($menu = $res->fetch_object())
{

    $sql_ing = "SELECT item_name, quantity FROM menu_details WHERE menu_id = $menu->menu_id ";
    $rs = $conn->query($sql_ing);
    while($items = $rs->fetch_object())
    {
        $qty = $menu->qty * $items->quantity;
        $item = trim($items->item_name);
        if ( array_key_exists($item, $ingredients) ) {
            $ingredients[$items] += $qty;
        } else {
            $ingredients[$items] = $qty; 
        }
    }
}

结果$ingredients数组看起来差不多,除了键是项目名称而不是数字、0、1、2等


推荐阅读