如何将嵌套数组转换为节点的平面数组 PHP?

时间:2021-05-22 22:25:24

标签: php arrays recursion tree

我有一个嵌套数组,其结构如下所述。

这是一个组织结构图,其中一个雇员可以与其他雇员相关:

$tree_array = [
[
    'id' => 1,
    'employee' => 'John',
    'leader_id' => NULL,
    'team' => [
        [
            'id' => 2,
            'employee' => 'Maria',
            'leader_id' => 1,
            'team' => [],
        ],
        [
            'id' => 3,
            'employee' => 'Kevin',
            'leader_id' => 1,
            'team' => [
                [
                    'id' => 4,
                    'employee' => 'Alan',
                    'leader_id' => 3,
                    'team' => [],
                ],
                [
                    'id' => 5,
                    'employee' => 'Bret',
                    'leader_id' => 3,
                    'team' => [],
                ],
            ],
        ],
    ],
]

];

每个节点都有一个 ID 和一个团队,可以是其他节点的数组等等。

我需要获取平面数组中的每个节点,就像这样的结构:

$flat_array = array(
array(
    'id' => 1,
    'employee' => 'John',
    'leader_id' => NULL
),
array(
    'id' => 2,
    'employee' => 'Maria',
    'leader_id' => 1
),
array(
    'id' => 3,
    'employee' => 'Kevin',
    'leader_id' => 1
),
...
);

我试图实现一个递归函数,但我只得到了最后一次迭代的节点。

有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

你可以做一个递归函数,像这样:

function flatten($arr, $final=array()) {
    foreach($arr as $a) {
      $tmp = $a;
      unset($tmp['team']);
      $final[]=   $tmp;
      if ($a['team'] && count($a['team']) > 0) $final = flatten($a['team'], $final);
    }
    return $final;
}

$flat =flatten($tree_array);

在这里测试:https://www.tehplayground.com/UHWCccFIkrS5v75Z

相关问题