Add index value of the same name to the PHP array

Asked

Viewed 246 times

3

Whoa, whoa, whoa, whoa, whoa, whoa, whoa, whoa, whoa, whoa, whoa, whoa, how do I add the values of the indexes that have the same name in php, I’m using the Laravel if you have any extra function.

Print:

[0] => Array
    (
        [Produto] => chocolate
        [Quantidade] => 300
    )

[1] => Array
    (
        [Produto] => morango
        [Quantidade] => 150
    )

[2] => Array
    (
        [Produto] => chocolate
        [Quantidade] => 400
    )

[3] => Array
    (
        [Produto] => morango
        [Quantidade] => 200
    )

[4] => Array
    (
        [Produto] => cacau
        [Quantidade] => 40
    )

[5] => Array
    (
        [Produto] => chocolate
        [Quantidade] => 250
    )

[6] => Array
    (
        [Produto] => morango
        [Quantidade] => 125
    )

I would like this result: Chocolate: 950 strawberry: 475 cocoa: 40

sum the values that have the same index;

thank you in advance

2 answers

3

<?php

$vendas = array(
    [ "Produto" => "chocolate", "Quantidade" => 300 ],
    [ "Produto" => "morango"  , "Quantidade" => 150 ],
    [ "Produto" => "chocolate", "Quantidade" => 400 ],
    [ "Produto" => "morango",   "Quantidade" => 200 ],
    [ "Produto" => "cacau",     "Quantidade" => 40  ],
    [ "Produto" => "chocolate", "Quantidade" => 250 ],
    [ "Produto" => "morango",   "Quantidade" => 125 ]
);

//Lista os sabores pela coluna Produto desprezando os valores duplicados 
//e permuta as chaves com os valores.
$venda_sabor = array_flip(array_column($vendas, "Produto"));

//Ajusta as vendas de cada sabor em 0.
$venda_sabor = array_fill_keys(array_keys($venda_sabor), 0);

//Para cada sabor soma as respectivas vendas.
foreach($vendas as $key=>$value){
  $venda_sabor[$value["Produto"]] += $value["Quantidade"];
}

//Imprime o resultado
print_r($venda_sabor);

Code working on Repl.it


Functions used:

array_flip(): Exchange all keys and their associated values in an array.

array_column(): Returns the values of a column of the given array.

array_fill_keys(): Fills an array with values by specifying keys.

array_keys(): Returns all keys or a part of the keys of an array.

  • 1

    thank you very much, Jader’s code also worked!

2


Simplifying the code of Augusto Vasques, and returning the result in the same input format:

<?php

$vendas = array(
    [ "Produto" => "chocolate", "Quantidade" => 300 ],
    [ "Produto" => "morango"  , "Quantidade" => 150 ],
    [ "Produto" => "chocolate", "Quantidade" => 400 ],
    [ "Produto" => "morango",   "Quantidade" => 200 ],
    [ "Produto" => "cacau",     "Quantidade" => 40  ],
    [ "Produto" => "chocolate", "Quantidade" => 250 ],
    [ "Produto" => "morango",   "Quantidade" => 125 ]
);

$venda_sabor = [];

//Para cada sabor soma as respectivas vendas.
foreach($vendas as $key=>$value){
  if (isset($venda_sabor[$value["Produto"]]))
    $venda_sabor[$value["Produto"]] += $value["Quantidade"];
  else
    $venda_sabor[$value["Produto"]] = $value["Quantidade"];
}

$vendas = [];

//Retornando para o formato original
foreach($venda_sabor as $key=>$value){
  $vendas[] = [ "Produto" => $key, "Quantidade" => $value ];
}

//Imprime o resultado
print_r($vendas);

Return:

(
    [0] => Array
        (
            [Produto] => chocolate
            [Quantidade] => 950
        )

    [1] => Array
        (
            [Produto] => morango
            [Quantidade] => 475
        )

    [2] => Array
        (
            [Produto] => cacau
            [Quantidade] => 40
        )

)
  • thank you very much Jader, simplified and solved. grateful

Browser other questions tagged

You are not signed in. Login or sign up in order to post.