I want to build a nested array from a simple table with Laravel Eloquent, but i couldn’t.
So basically below is a snap shot of my table
and this is the array I want to build
Advertisement
Answer
You can use some methods from collection :
$result = $data->groupBy(['market_id', 'base_currency', 'currency_id']) ->map(function ($item) { return $item->map(function ($item) { return $item->map(function ($item) { return $item->map(function ($item) { return $item['currency_id']; }); })->flatten(); })->sortKeys(); }); dd($result->toArray());
array:1 [ 1 => array:2 [ 1 => array:2 [ 0 => 2 1 => 3 ] 2 => array:2 [ 0 => 1 1 => 2 ] ] ]
Explanation
groupBy
The groupBy
method groups the collection’s items by a given key. Multiple grouping criteria may be passed as an array. Each array element will be applied to the corresponding level within a multi-dimensional array:
$data->groupBy(['market_id', 'base_currency', 'currency_id']);
map
The map
method iterates through the collection and passes each value to the given callback.
->map(function ($item) { return $item; });
flatten
The flatten
method flattens a multi-dimensional collection into a single dimension:
->flatten()
sortKeys
The sortKeys
method sorts the collection by the keys of the underlying associative array:
->sortKeys()