我有一个这样的数组:
array (size=4)
0 =>
array (size=4)
key => value
key => value
key => value
key => value
1 =>
array (size=2)
key => value
key => value
2 =>
array (size=1)
key => value
3 =>
array (size=1)
key => value
我想将数组展平为:
array (size=4)
key => value
key => value
key => value
key => value
key => value
key => value
key => value
key => value
我已经尝试了自己的解决方案,使用诸如array_merge
,array_walk_recursive
和RecursiveIteratorIterator
之类的东西与RecursiveArrayIterator
。我还尝试了许多在StackOverflow上发布的类似问题的解决方案,但没有一个像我期望的那样工作。他们要么不保留键值对,要么给我一个与原始数组相同的数组。我的尝试看起来像这样:
$multidimensionalArray = array(stuff goes here);
$flatArray = array();
function flattenArray ($array) {
foreach ($array as $key => $value) {
if (is_array($value) {
flattenArray($value);
}
else {
$flatArray[$key] = $value;
}
}
}
flattenArray($multidimensionalArray);
我想知道RecursiveArrayIterator
会出什么问题,因为您只需要使用最简单的foreach
循环从迭代器收集键/值对:
$a = [
0 => ['a' => 1, 'b' => 2],
1 => ['x' => 3, 'y' => 4],
2 => 5,
3 => ['m' => 6, ['k' => 7, 'n' => 8]],
];
$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($a));
foreach ($it as $key => $value) {
$result[$key] = $value;
}
print_r($result);
输出:
Array
(
[a] => 1
[b] => 2
[x] => 3
[y] => 4
[2] => 5
[m] => 6
[k] => 7
[n] => 8
)