Last active
October 28, 2024 18:01
-
-
Save SeanCannon/6585889 to your computer and use it in GitHub Desktop.
PHP array_flatten() function. Convert a multi-dimensional array into a single-dimensional array.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Convert a multi-dimensional array into a single-dimensional array. | |
* @author Sean Cannon, LitmusBox.com | seanc@litmusbox.com | |
* @param array $array The multi-dimensional array. | |
* @return array | |
*/ | |
function array_flatten($array) { | |
if (!is_array($array)) { | |
return false; | |
} | |
$result = array(); | |
foreach ($array as $key => $value) { | |
if (is_array($value)) { | |
$result = array_merge($result, array_flatten($value)); | |
} else { | |
$result = array_merge($result, array($key => $value)); | |
} | |
} | |
return $result; | |
} |
@graceman9 What data produces an unexpected result?
For infinite depth, just use -1
@brandonmcconnell Have you noticed the difference?
{
"a": "value1",
"b_c": "value1.1",
}
and
{
"a": "value1",
"c": "value1.1",
}
@graceman9 Oh you want the keys to be concatenated, so every key keeps the log of its original path. Yeah, you are correct that my version does not do that. I tried to follow the approach common in other languages. 🙂
For a simple 2D array:
$multiDimArray = [[1, 2], [3, 4], [5, 6]];
$flatArray = array_reduce($multiDimArray, 'array_merge', []);
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@brandonmcconnell Using my sample data it gives not what I expected.
By the way, how to use it with unlimited $depth?
array_flatten($r, 999)
doesn't look good for meDespite of that your function does the job of flattening, no doubt :) maybe flatten is not the right word because of ambiguity?
@sayhicoelho thanks for 7.x support!