Add 2 arrays with equal indexes

0

I have an array in a $_SESSION['Carrinho'] :

Array ( [0] => Array ( [Produto] => ENH1264-1 
                       [Quantidade] => 2 ) 
        [1] => Array ( [Produto] => ENH1264-2 
                       [Quantidade] => 3 ) 
        [2] => Array ( [Produto] => ENH1264-6 
                       [Quantidade] => 1 ) 
      )

I would like to add new values to this array. I have this second array:

Array ( [0] => Array ( [Produto] => ENH1264-6 
                       [Quantidade] => 5 ) 
        [1] => Array ( [Produto] => ENH1264-1 
                       [Quantidade] => 8 ) 
      )

Is there any way, without going out doing several foreach comparing the results, generating new arrays? Any simplified way?

The expected result would be:

Array ( 
    [0] => Array ( 
        [Produto] => ENH1264-1 
        [Quantidade] => 10 
    ) 
    [1] => Array ( 
        [Produto] => ENH1264-2 
        [Quantidade] => 3
    ) 
    [2] => Array ( 
        [Produto] => ENH1264-6 
        [Quantidade] => 6
    ) 
)

See that products that are equal have their sums added together. If in the second array there is a product that does not have the first, it adds as a new index.

    
asked by anonymous 12.12.2017 / 21:09

2 answers

1

If you want something simple you can rely on array_map to map an array of products in their names and then search the product with array_search . If you find the product updates the quantity, otherwise add a new entry to the array.

Example of implementing the logic described above:

$obterProduto = function($p) { return $p["Produto"]; };

foreach ($compras as $compra){
    $posicao = array_search($compra["Produto"], array_map($obterProduto, $produtos));
    if ($posicao === false){ //se não existe adiciona
        $produtos[] = $compra;
    }
    else { //se existe aumenta apenas a quantidade
        $produtos[$posicao]["Quantidade"] += $compra["Quantidade"]; 
    }
}

See the code working on Ideone

    
13.12.2017 / 00:43
-1

So I understand it's possible to do so too:

<?php

/*Obtendo Produto via POST e armazendo em array.*/
$Dados = array([Produto] => $_POST['produto'], 
               [Quantidade] => $_POST['quantidade']);

/*Se o Carrinho ainda não foi configurado, adicione os dados a ele.*/
if (!isset($_SESSION['Carrinho']){
    $_SESSION['Carrinho'] = array($Dados);
}
else{
    /*Senao verifique se já existe o produto dentro dele.*/
    if(in_array($Dados['Produto'], $_SESSION['Carrinho']){

        /*Se existe percorra o carrinho, encontre e acumule a quantidade*/
        foreach($_SESSION['Carrinho'] as $multi){
            $multi[quantidade] += $Dados['Quantidade']
        }
    }
    /*se o produto é novo adicione ele no proximo indice do carrinho*/
    else{
        $_SESSION['Carrinho'] = array_fill(count(Dados['Produto']), 1, $Dados);
    }
}

/*Limpa o array DADOS*/
unset($Dados);

?>
    
13.12.2017 / 00:50