How to Flatten Multidimentional Array in PHP ?
Given a Multi-dimensional array, the task is to flatten the multidimensional array into a simple array (1-dimensional array) in PHP.
Examples:
Input: arr = [[1, 2], [3, 4, 5], 6]
Output: [1, 2, 3, 4, 5, 6]
Input: arr = [[1, 4, 5], [6, 7, 8]]
Output: [1, 4, 5, 6, 7, 8]
Working with multidimensional arrays is a common task in PHP. However, there are situations where you might need to flatten a multidimensional array, converting it into a single-dimensional array.
There are different approaches to flattening a multi-dimensional array, these are:
Table of Content
Approach 1: Using Recursive Method
The recursive approach involves traversing the nested arrays using recursion. It's a clean and flexible method that works well for arrays of any depth.
Example:
<?php
function flattenArray($arr) {
$res = [];
foreach ($arr as $val) {
if (is_array($val)) {
$res = array_merge($res, flattenArray($val));
} else {
$res[] = $val;
}
}
return $res;
}
// Driver code
$arr = [1, [2, 3, [4, 5]], 6];
$flatArr = flattenArray($arr);
print_r($flatArr);
?>
Output
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
)Approach 2: Iterative Method using Stack
This approach uses an iterative method with a stack to flatten the array. It provides an alternative to recursion.
Example:
<?php
function flattenArray($arr) {
$res = [];
$stack = [$arr];
while ($stack) {
$current = array_shift($stack);
foreach ($current as $value) {
if (is_array($value)) {
array_unshift($stack, $value);
} else {
$res[] = $value;
}
}
}
return $res;
}
// Driver code
$arr = [1, [2, 3, [4, 5]], 6];
$flatArr = flattenArray($arr);
print_r($flatArr);
?>
Output
Array
(
[0] => 1
[1] => 6
[2] => 2
[3] => 3
[4] => 4
[5] => 5
)Approach 3: Using RecursiveIteratorIterator Class
PHP provides the RecursiveIteratorIterator class, this is used to flatten multidimensional arrays.
Example:
<?php
function flattenArray($arr) {
$iterator = new RecursiveIteratorIterator(
new RecursiveArrayIterator($arr)
);
return iterator_to_array($iterator, false);
}
// Driver code
$arr = [1, [2, 3, [4, 5]], 6];
$flatArr = flattenArray($arr);
print_r($flatArr);
?>
Output
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
)Approach 4: Using array_walk_recursive()
PHP's array_walk_recursive() function provides a straightforward way to flatten a multidimensional array. This function applies a user-defined callback function to each element of the array recursively.
Example: The array_walk_recursive() approach provides a clean and efficient way to flatten a multidimensional array in PHP.
<?php
function flattenArray($array) {
$flatArray = [];
array_walk_recursive($array, function($value) use (&$flatArray) {
$flatArray[] = $value;
});
return $flatArray;
}
// Example usage:
$arr1 = [[1, 2], [3, 4, 5], 6];
$arr2 = [[1, 4, 5], [6, 7, 8]];
print_r(flattenArray($arr1));
// Output: [1, 2, 3, 4, 5, 6]
print_r(flattenArray($arr2));
// Output: [1, 4, 5, 6, 7, 8]
?>
Output
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
)
Array
(
[0] => 1
[1] => 4
[2] => 5
[3] => 6
[4] => 7
[5] => 8
)
Approach 5: Using array_reduce() and array_merge()
This approach combines array_reduce() and array_merge() functions to flatten the multidimensional array. array_reduce() iterates over each sub-array and merges them into a single array.
Example:
<?php
// Example multidimensional array
$arr = [[1, 2], [3, 4, 5], 6];
// Flatten the multidimensional array using array_reduce and array_merge
$flattened = array_reduce($arr, function($carry, $item) {
return array_merge($carry, is_array($item) ? $item : [$item]);
}, []);
print_r($flattened);
?>
Output
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
)