Просуммировать значения в массиве объектов
Дан массив $animals вида
array(4) {
[0]=>
object(Chicken)#2 (3) {
["id"]=>
int(1)
["egg"]=>
int(0)
["typeProduct"]=>
string(8) "Яица"
}
[1]=>
object(Cow)#3 (3) {
["id"]=>
int(2)
["milk"]=>
int(10)
["typeProduct"]=>
string(12) "Молоко"
}
[2]=>
object(Chicken)#4 (3) {
["id"]=>
int(3)
["egg"]=>
int(0)
["typeProduct"]=>
string(8) "Яица"
}
[3]=>
object(Cow)#5 (3) {
["id"]=>
int(4)
["milk"]=>
int(9)
["typeProduct"]=>
string(12) "Молоко"
}
Нужно преобразовать его так, чтобы он подсчитывал кол-во продукта.
Пример
array('Молоко' => 19, 'Яица' => 0)
Ответы (1 шт):
Автор решения: Slava Rozhnev
→ Ссылка
Используем функцию array_reduce
$result = array_reduce(
$data,
function($acc, $el) {
// преобразуем объект в массив
$el = (array)$el;
if (!isset($acc[$el['typeProduct']])) $acc[$el['typeProduct']] = 0;
$acc[$el['typeProduct']] += $el[array_keys($el)[1]];
return $acc;
},
[]
);