groupBy(function ($item,$key) use ($id) { $string = ''; foreach ($id as $key) { if ($string AND array_get($item,$key)) $string .= '.'; $string .= $item[$key]; } return $string; })->transform(function ($items,$key) use ($consolidateKeys) { $newitem = []; if ($items->count()) { $c = 0; foreach ($items as $item) { if (! $c++) { $newitem = $item; continue; } foreach ($item as $k => $v) { // Add these values to the existing ones if (in_array($k, $consolidateKeys)) { if (!isset($newitem[$k])) $newitem[$k] = 0; $newitem[$k] += $v; } } } } else { $newitem = $items; } return $newitem; }); } }