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

Flatten array while preserving key value pairs in 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_recursiveRecursiveIteratorIteratorRecursiveArrayIterator 等方法尝试了自己的解决方案。我还尝试了 Whosebug 上针对类似问题发布的许多解决方案,但其中 none 的解决方案符合我的预期。他们要么不保留键值对,要么给我一个与原始数组相同的数组。我的尝试看起来像这样:

$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 循环从迭代器中收集 key/value 对:

$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
)