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 🇮🇳

Vishnu Damwala
Vishnu Damwala

A web geek, an industry experienced web developer & tutor/instructor residing in India 🇮🇳