<?php
// Seu array de objetos.
// Array de objetos como fornecido no exemplo.
$produtos = [
(object)[
'produto' => '000001', 'var1' => 'LR', 'var2' => 'G', 'estoque' => 4.0000
],
(object)[
'produto' => '000001', 'var1' => 'AZ', 'var2' => 'G', 'estoque' => -4.0000
],
(object)[
'produto' => '000001', 'var1' => 'VD', 'var2' => 'G', 'estoque' => 0.0000
],
(object)[
'produto' => '000001', 'var1' => 'BR', 'var2' => 'G', 'estoque' => 17.0000
],
(object)[
'produto' => '000001', 'var1' => 'VR', 'var2' => 'G', 'estoque' => 0.0000
],
// ... resto dos objetos
];
$resultado = [];
foreach ($produtos as $produto) {
// Obtendo o tamanho (último caracter de var2)
$tamanho = substr($produto->var2, -1);
// Checando se a chave do produto já existe no array resultado.
if (!isset($resultado[$produto->produto])) { $resultado[$produto->produto] = [];
}
// Checando se a chave da var1 já existe no sub-array do produto.
if (!isset($resultado[$produto->produto][$produto->var1])) { $resultado[$produto->produto][$produto->var1] = [];
}
// Inserindo ou somando o estoque ao tamanho correspondente.
if (!isset($resultado[$produto->produto][$produto->var1][$tamanho])) { $resultado[$produto->produto][$produto->var1][$tamanho] = 0;
}
$resultado[$produto->produto][$produto->var1][$tamanho] += $produto->estoque;
}
// Para visualizar o resultado
echo "<pre>";
echo "</pre>";
PD9waHAKCi8vIFNldSBhcnJheSBkZSBvYmpldG9zLgovLyBBcnJheSBkZSBvYmpldG9zIGNvbW8gZm9ybmVjaWRvIG5vIGV4ZW1wbG8uCiRwcm9kdXRvcyA9IFsKICAgIChvYmplY3QpWwogICAgICAgICdwcm9kdXRvJyA9PiAnMDAwMDAxJywgJ3ZhcjEnID0+ICdMUicsICd2YXIyJyA9PiAnRycsICdlc3RvcXVlJyA9PiA0LjAwMDAKICAgIF0sCiAgICAob2JqZWN0KVsKICAgICAgICAncHJvZHV0bycgPT4gJzAwMDAwMScsICd2YXIxJyA9PiAnQVonLCAndmFyMicgPT4gJ0cnLCAnZXN0b3F1ZScgPT4gLTQuMDAwMAogICAgXSwKICAgIChvYmplY3QpWwogICAgICAgICdwcm9kdXRvJyA9PiAnMDAwMDAxJywgJ3ZhcjEnID0+ICdWRCcsICd2YXIyJyA9PiAnRycsICdlc3RvcXVlJyA9PiAwLjAwMDAKICAgIF0sCiAgICAob2JqZWN0KVsKICAgICAgICAncHJvZHV0bycgPT4gJzAwMDAwMScsICd2YXIxJyA9PiAnQlInLCAndmFyMicgPT4gJ0cnLCAnZXN0b3F1ZScgPT4gMTcuMDAwMAogICAgXSwKICAgIChvYmplY3QpWwogICAgICAgICdwcm9kdXRvJyA9PiAnMDAwMDAxJywgJ3ZhcjEnID0+ICdWUicsICd2YXIyJyA9PiAnRycsICdlc3RvcXVlJyA9PiAwLjAwMDAKICAgIF0sCiAgICAvLyAuLi4gcmVzdG8gZG9zIG9iamV0b3MKXTsKCiRyZXN1bHRhZG8gPSBbXTsKCmZvcmVhY2ggKCRwcm9kdXRvcyBhcyAkcHJvZHV0bykgewogICAgLy8gT2J0ZW5kbyBvIHRhbWFuaG8gKMO6bHRpbW8gY2FyYWN0ZXIgZGUgdmFyMikKICAgICR0YW1hbmhvID0gc3Vic3RyKCRwcm9kdXRvLT52YXIyLCAtMSk7CiAgICAKICAgIC8vIENoZWNhbmRvIHNlIGEgY2hhdmUgZG8gcHJvZHV0byBqw6EgZXhpc3RlIG5vIGFycmF5IHJlc3VsdGFkby4KICAgIGlmICghaXNzZXQoJHJlc3VsdGFkb1skcHJvZHV0by0+cHJvZHV0b10pKSB7CiAgICAgICAgJHJlc3VsdGFkb1skcHJvZHV0by0+cHJvZHV0b10gPSBbXTsKICAgIH0KICAgIAogICAgLy8gQ2hlY2FuZG8gc2UgYSBjaGF2ZSBkYSB2YXIxIGrDoSBleGlzdGUgbm8gc3ViLWFycmF5IGRvIHByb2R1dG8uCiAgICBpZiAoIWlzc2V0KCRyZXN1bHRhZG9bJHByb2R1dG8tPnByb2R1dG9dWyRwcm9kdXRvLT52YXIxXSkpIHsKICAgICAgICAkcmVzdWx0YWRvWyRwcm9kdXRvLT5wcm9kdXRvXVskcHJvZHV0by0+dmFyMV0gPSBbXTsKICAgIH0KCiAgICAvLyBJbnNlcmluZG8gb3Ugc29tYW5kbyBvIGVzdG9xdWUgYW8gdGFtYW5obyBjb3JyZXNwb25kZW50ZS4KICAgIGlmICghaXNzZXQoJHJlc3VsdGFkb1skcHJvZHV0by0+cHJvZHV0b11bJHByb2R1dG8tPnZhcjFdWyR0YW1hbmhvXSkpIHsKICAgICAgICAkcmVzdWx0YWRvWyRwcm9kdXRvLT5wcm9kdXRvXVskcHJvZHV0by0+dmFyMV1bJHRhbWFuaG9dID0gMDsKICAgIH0KICAgICRyZXN1bHRhZG9bJHByb2R1dG8tPnByb2R1dG9dWyRwcm9kdXRvLT52YXIxXVskdGFtYW5ob10gKz0gJHByb2R1dG8tPmVzdG9xdWU7Cn0KCi8vIFBhcmEgdmlzdWFsaXphciBvIHJlc3VsdGFkbwplY2hvICI8cHJlPiI7CnByaW50X3IoJHJlc3VsdGFkbyk7CmVjaG8gIjwvcHJlPiI7Cg==