Php 展平嵌套关联数组,同时保留键值组

Php 展平嵌套关联数组,同时保留键值组,php,multidimensional-array,Php,Multidimensional Array,我有如下结构的深层嵌套关联数组: Array ( [id] => 1 [name] => Noodles [nodes] => Array ( [0] => Array ( [id] => 2 [name] => Egg [nodes] => Array ( )

我有如下结构的深层嵌套关联数组:

Array
(
  [id] => 1
  [name] => Noodles
  [nodes] => Array
    (
      [0] => Array
          (
            [id] => 2
            [name] => Egg
            [nodes] => Array
                (
                )

          )

      [1] => Array
          (
            [id] => 3
            [name] => Flour
            [nodes] => Array
                (
                  [0] => Array
                      (
                        [id] => 4
                        [name] => Water
                        [nodes] => Array
                            (
                            )

                      )

                )

          )

    )

)
$tempId = '';
foreach ($it as $key => $value) {
    if ($key == 'id'){
        if ($value != $tempId) {
            $temp = [];
        }
    }
    $temp[$key] = $value;
    if ($key == 'name') {
        $result[] = $temp;
    }
}
我正试着把它变成:

[
    [
        'id'        => 1,
        'name'      => 'Noodles',
    ],
    [
        'id'        => 2,
        'name'      => 'Egg',
    ],
    [
        'id'        => 3,
        'name'      => 'Flour',
    ],
    [
        'id'        => 4,
        'name'      => 'Water',
    ]
];
我尝试过使用递归迭代,但我无法让它返回同一维度上的所有键值以推入新数组:

// $data is the incoming structure mentioned above

$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($data));

foreach ($it as $key=>$value) {
    $result[$key] = $value;
}

print_r($result);
以上仅打印最后一个/最深的阵列:

Array
(
    [id] => 4
    [name] => Water
)

如何最好地展平所有这些多维关联数组?

正在重复$key的值,因此每次$keyid,例如,$result['id']的现有值都将被替换

我不确定这是否充分利用了迭代器,但请尝试以下方法:

Array
(
  [id] => 1
  [name] => Noodles
  [nodes] => Array
    (
      [0] => Array
          (
            [id] => 2
            [name] => Egg
            [nodes] => Array
                (
                )

          )

      [1] => Array
          (
            [id] => 3
            [name] => Flour
            [nodes] => Array
                (
                  [0] => Array
                      (
                        [id] => 4
                        [name] => Water
                        [nodes] => Array
                            (
                            )

                      )

                )

          )

    )

)
$tempId = '';
foreach ($it as $key => $value) {
    if ($key == 'id'){
        if ($value != $tempId) {
            $temp = [];
        }
    }
    $temp[$key] = $value;
    if ($key == 'name') {
        $result[] = $temp;
    }
}

谢谢,由于数据结构的僵化,这并不理想,但现在可以用了。是的,这不是一个通用的解决方案,但它说明了我的意思。祝你好运