fork download
  1. <?php
  2.  
  3. // Seu array de objetos.
  4. // Array de objetos como fornecido no exemplo.
  5. $produtos = [
  6. (object)[
  7. 'produto' => '000001', 'var1' => 'LR', 'var2' => 'G', 'estoque' => 4.0000
  8. ],
  9. (object)[
  10. 'produto' => '000001', 'var1' => 'AZ', 'var2' => 'G', 'estoque' => -4.0000
  11. ],
  12. (object)[
  13. 'produto' => '000001', 'var1' => 'VD', 'var2' => 'G', 'estoque' => 0.0000
  14. ],
  15. (object)[
  16. 'produto' => '000001', 'var1' => 'BR', 'var2' => 'G', 'estoque' => 17.0000
  17. ],
  18. (object)[
  19. 'produto' => '000001', 'var1' => 'VR', 'var2' => 'G', 'estoque' => 0.0000
  20. ],
  21. // ... resto dos objetos
  22. ];
  23.  
  24. $resultado = [];
  25.  
  26. foreach ($produtos as $produto) {
  27. // Obtendo o tamanho (último caracter de var2)
  28. $tamanho = substr($produto->var2, -1);
  29.  
  30. // Checando se a chave do produto já existe no array resultado.
  31. if (!isset($resultado[$produto->produto])) {
  32. $resultado[$produto->produto] = [];
  33. }
  34.  
  35. // Checando se a chave da var1 já existe no sub-array do produto.
  36. if (!isset($resultado[$produto->produto][$produto->var1])) {
  37. $resultado[$produto->produto][$produto->var1] = [];
  38. }
  39.  
  40. // Inserindo ou somando o estoque ao tamanho correspondente.
  41. if (!isset($resultado[$produto->produto][$produto->var1][$tamanho])) {
  42. $resultado[$produto->produto][$produto->var1][$tamanho] = 0;
  43. }
  44. $resultado[$produto->produto][$produto->var1][$tamanho] += $produto->estoque;
  45. }
  46.  
  47. // Para visualizar o resultado
  48. echo "<pre>";
  49. print_r($resultado);
  50. echo "</pre>";
  51.  
Success #stdin #stdout 0.02s 26300KB
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>