$test = collect([ [ 'key1' => ['value1' => 5, 'value2' => 3, 'value3' => 0], 'key2' => ['value1' => 1, 'value2' => 6, 'value3' => 2], 'key3' => ['value1' => 0, 'value2' => 0, 'value3' => 1], ], [ 'key1' => ['value1' => 3, 'value2' => 1, 'value3' => 7], 'key2' => ['value1' => 1, 'value2' => 3, 'value3' => 2], 'key3' => ['value1' => 1, 'value2' => 6, 'value3' => 1], ], [ 'key1' => ['value1' => 2, 'value2' => 3, 'value3' => 9], 'key2' => ['value1' => 3, 'value2' => 8, 'value3' => 3], 'key3' => ['value1' => 1, 'value2' => 0, 'value3' => 6], ] ]); $mappedCollection = collect($test->first())->keys()->mapWithKeys(function($item,$key) use($test){ return[ $item => $test->map(function ($mapItem, $mapKey) use($item) { return $mapItem[$item]; }) ]; })->mapWithKeys(function($item,$key){ $eachLine = collect($item->first())->keys()->mapWithKeys(function($mapItem) use($item){ return[ $mapItem => $item->sum($mapItem) ]; }); return [$key => $eachLine]; })->all(); dd($mappedCollection);