如何在PHP中递归地展平树数组?

Nar*_*ian 2 php arrays recursion

我有一个嵌套数组,我想递归地展平它。我的函数在某些情况下有效,在其他情况下则失败。我不明白出了什么问题。

嵌套数组示例:

Array
(
    [0] => Array
        (
            [id] => 6
            [login] => Breanne
            [level] => Subdealer
            [type] => admin
            [supervisor_id] => 7
            [name] => Dominique Berge
            [active] => 0
            [pending] => 0
            [waiting] => 0
            [child] => Array
                (
                    [0] => Array
                        (
                            [id] => 10
                            [login] => Priscilla
                            [level] => Subdealer
                            [type] => employee
                            [supervisor_id] => 6
                            [name] => Naomie Hudson
                            [active] => 0
                            [pending] => 0
                            [waiting] => 0
                        )

                )

        )

    [1] => Array
        (
            [id] => 15
            [login] => Myrtis
            [level] => Dealer
            [type] => manager
            [supervisor_id] => 7
            [name] => Dr. Neha Harris
            [active] => 0
            [pending] => 0
            [waiting] => 0
        )

    [2] => Array
        (
            [id] => 18
            [login] => Leon
            [level] => Dealer
            [type] => employee
            [supervisor_id] => 7
            [name] => Felipa Pacocha
            [active] => 0
            [pending] => 0
            [waiting] => 0
        )

)
Run Code Online (Sandbox Code Playgroud)

平面示例:

Array
(
    [0] => Array
        (
            [id] => 10
            [login] => Priscilla
            [level] => Subdealer
            [type] => employee
            [supervisor_id] => 6
            [name] => Naomie Hudson
            [active] => 0
            [pending] => 0
            [waiting] => 0
        )

    [1] => Array
        (
            [id] => 6
            [login] => Breanne
            [level] => Subdealer
            [type] => admin
            [supervisor_id] => 7
            [name] => Dominique Berge
            [active] => 0
            [pending] => 0
            [waiting] => 0
        )

    [2] => Array
        (
            [id] => 15
            [login] => Myrtis
            [level] => Dealer
            [type] => manager
            [supervisor_id] => 7
            [name] => Dr. Neha Harris
            [active] => 0
            [pending] => 0
            [waiting] => 0
        )

    [3] => Array
        (
            [id] => 18
            [login] => Leon
            [level] => Dealer
            [type] => employee
            [supervisor_id] => 7
            [name] => Felipa Pacocha
            [active] => 0
            [pending] => 0
            [waiting] => 0
        )

)
Run Code Online (Sandbox Code Playgroud)

我的功能:

function flatten($element)
{
    $flatArray = array();
    if (count($element) == 1 && !array_key_exists('child', $element) && !is_array($element)) {
        $flatArray[] = $element;
    }
    foreach ($element as $key => $node) {
        if (array_key_exists('child', $node)) {
            $flatArray =  flatten($node['child']);
            unset($node['child']);
            $flatArray[] = $node;
        } else {
            $flatArray[] = $node;
        }
    }


    return $flatArray;
}
Run Code Online (Sandbox Code Playgroud)

失败的案例太长,我将其放入一个文件中,链接为https://drive.google.com/file/d/0B5A_yGNzXeg5UG11YWJDXzlMQVk/view?usp=sharing

Kri*_*ofe 6

合并内部展平输出。

function flatten($element)
{
    $flatArray = array();
    foreach ($element as $key => $node) {
        if (array_key_exists('child', $node)) {
            $flatArray = array_merge($flatArray, flatten($node['child']));
            unset($node['child']);
            $flatArray[] = $node;
        } else {
            $flatArray[] = $node;
        }
    }


    return $flatArray;
}
Run Code Online (Sandbox Code Playgroud)