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

时间:2021-04-22 17:16:03

标签: php multidimensional-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
                            (
                            )

                      )

                )

          )

    )

)

我正试图扁平化:

[
    [
        '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
)

我怎样才能最好地展平所有这些多维关联数组?

1 个答案:

答案 0 :(得分:1)

$key的值是重复的,所以每次$key都是id,例如的现有值>$result['id'] 正在被替换。

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

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