展平数组,同时保留 PHP 中的键值对



我有一个这样的数组:

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_mergearray_walk_recursiveRecursiveIteratorIterator之类的东西与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
)

最新更新