How to group products by id and sum the total quantities of each product coming from a json array in php?

0

I need to add the quantity of each product that was sold by grouping them by "product_id" and adding their quantities. That is, in the example below I have 4 requests that need to print on the screen + - as follows:

Total qtd coca cola : 6
Total qtd moda catupiry : 11
Total valor coca cola: 24,00
Total valor moda catupiry: 55,00

The data is saved in an json array in the SQL database.

[{"id_produto":"768","qtd":8,"valor_uni":"5.00","produto":"MODA COM CATUPIRY"}]
[{"id_produto":"750","qtd":2,"valor_uni":"4.00","produto":"COCA-COLA LATA"}]
[{"id_produto":"768","qtd":3,"valor_uni":"5.00","produto":"MODA COM CATUPIRY"}]
[{"id_produto":"750","qtd":4,"valor_uni":"4.00","produto":"COCA-COLA LATA"}]

I tried several ways a week ago and I could not. Could you help me?

    
asked by anonymous 01.10.2018 / 05:31

1 answer

0

Test the following code:

   $json = json_decode('[{"id_produto":"768","qtd":8,"valor_uni":"5.00","produto":"MODA COM CATUPIRY"},
    {"id_produto":"750","qtd":2,"valor_uni":"4.00","produto":"COCA-COLA LATA"},
    {"id_produto":"768","qtd":3,"valor_uni":"5.00","produto":"MODA COM CATUPIRY"},
    {"id_produto":"750","qtd":4,"valor_uni":"4.00","produto":"COCA-COLA LATA"}]', true);

    $final = array();
    foreach($json as $produto)
    {
      if(isset($final[$produto["id_produto"]]))
      {
         $final[$produto["id_produto"]]["quantidade"] += $produto["qtd"];
         $final[$produto["id_produto"]]["valor_uni"] += $produto["qtd"] * $produto["valor_uni"];
      }else{
           $final[$produto["id_produto"]]["quantidade"] = $produto["qtd"];
           $final[$produto["id_produto"]]["valor_uni"] = $produto["qtd"] * $produto["valor_uni"];
      }
    }

print_r($final);

Result:

Array
(
    [768] => Array
        (
            [quantidade] => 11
            [valor_uni] => 55
        )

    [750] => Array
        (
            [quantidade] => 6
            [valor_uni] => 24
        )

)
    
01.10.2018 / 05:47