fork download
  1. <?php
  2.  
  3. // Array de objetos como fornecido no exemplo.
  4. $produtos = [
  5. (object)[
  6. 'produto' => '000001', 'var1' => 'LR', 'var2' => 'G', 'estoque' => 4.0000
  7. ],
  8. (object)[
  9. 'produto' => '000001', 'var1' => 'AZ', 'var2' => 'G', 'estoque' => -4.0000
  10. ],
  11. (object)[
  12. 'produto' => '000001', 'var1' => 'VD', 'var2' => 'G', 'estoque' => 0.0000
  13. ],
  14. (object)[
  15. 'produto' => '000001', 'var1' => 'BR', 'var2' => 'G', 'estoque' => 17.0000
  16. ],
  17. (object)[
  18. 'produto' => '000001', 'var1' => 'VR', 'var2' => 'G', 'estoque' => 0.0000
  19. ],
  20. // ... resto dos objetos
  21. ];
  22.  
  23. $resultado = [];
  24.  
  25. foreach ($produtos as $produto) {
  26. // Obtendo o tamanho (último caracter de var2)
  27. $tamanho = substr($produto->var2, -1);
  28.  
  29. // Utilizando o operador de coalescência nula (??) para simplificar a inicialização dos arrays.
  30. $resultado[$produto->produto][$produto->var1][$tamanho] = ($resultado[$produto->produto][$produto->var1][$tamanho] ?? 0) + $produto->estoque;
  31. }
  32.  
  33. // Para visualizar o resultado
  34. echo "<pre>";
  35. print_r($resultado);
  36. echo "</pre>";
  37.  
Success #stdin #stdout 0.03s 26324KB
stdin
Standard input is empty
stdout
<pre>Array
(
    [000001] => Array
        (
            [LR] => Array
                (
                    [G] => 4
                )

            [AZ] => Array
                (
                    [G] => -4
                )

            [VD] => Array
                (
                    [G] => 0
                )

            [BR] => Array
                (
                    [G] => 17
                )

            [VR] => Array
                (
                    [G] => 0
                )

        )

)
</pre>