Flatten Array using Arr::flatten() in Laravel
During development, the developer needs to go through loops to prepare a single dimensional array out of a multi-dimensional array.
Laravel provides many helpers which come handy in multiple ways and saves developers work.
One of such is Arr::flatten()
which flattens a multi-dimensional array into a single level by default.
Tested with Laravel versions 5.8, 6 and 7.
We need to import Illuminate\Support\Arr
namespace with use
keyword.
Kindly check for your version on the official DOC for Laravel Helper Arr::flatten(). This link will take you to Laravel 7 Documentation.
Syntax
Arr::flatten(array $array, [int $depth = INF])
Parameters
$array (necessary)
- The first parameter is necessary and must be an array that needs to be flattened.
- Laravel will extract elements and provides us with a new single dimension array based on the depth parameter.
$depth (optional)
- The second parameter specifies the depth and it’s an optional parameter.
- This value must be an integer type.
- The depth specifies how deep a nested array should be flattened.
- The default value for depth is infinity(
INF
) from which Laravel will extract elements and provides us with a new single dimension array.
Return value
It returns a new 1-D flattened array.
Example
$data = [
'country' => 'India 🇮🇳',
'languages' => [
'Gujarati',
'Hindi',
'Sanskrit',
'Tamil',
'Urdu',
],
];
dd(
Arr::flatten($data)
);
Output
array:3 [
0 => "India 🇮🇳"
1 => "Gujarati"
2 => "Hindi"
3 => "Sanskrit"
4 => "Tamil"
5 => "Urdu"
]
Deeper Nested Arrays
This method also works on our specified level deep. We simply need to pass the appropriate depth parameter in order to flatten deeper multi-dimensional or nested arrays.
Example with 2 levels deep
$data = [[12, [2, 4], 124, 7, 10, 8, [15, [6, 7]]]];
dd(
Arr::flatten($data, 2)
);
Output for 2 levels deep
array:9 [
0 => 12
1 => 2
2 => 4
3 => 124
4 => 7
5 => 10
6 => 8
7 => 15
8 => array:2 [
0 => 6
1 => 7
]
]
Example with INF level deep
$data = [[12, [2, 4], 124, 7, 10, 8, [15, [6, 7]]]];
dd(
Arr::flatten($data, INF)
);
Output for INF level deep
array:10 [
0 => 12
1 => 2
2 => 4
3 => 124
4 => 7
5 => 10
6 => 8
7 => 15
8 => 6
9 => 7
]
Resources
Happy 😄 coding
With ❤️ from 🇮🇳