Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在php中递归展平树数组?_Php_Arrays_Recursion - Fatal编程技术网

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

如何在php中递归展平树数组?,php,arrays,recursion,Php,Arrays,Recursion,我有一个嵌套数组,我想递归展平它。我的函数在某些情况下有效,但在某些情况下失败。我不明白这是怎么回事 嵌套数组示例: Array ( [0] => Array ( [id] => 6 [login] => Breanne [level] => Subdealer [type] => admin [supervisor_id]

我有一个嵌套数组,我想递归展平它。我的函数在某些情况下有效,但在某些情况下失败。我不明白这是怎么回事

嵌套数组示例:

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
        )

)
简单的例子是:

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
        )

)
我的职能:

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;
}

失败的案例太长,我将其放在一个文件中,该文件的链接是

合并内部展平输出

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;
}

您共享了错误的文档。对此表示抱歉。我已经改正了。
function flatten_array($items, array $flattened = []) {
    foreach ($items as $key => $value) {
        if (is_array($value)) {
            $flattened = flatten_array($value, $flattened);
            continue;
        }

        $flattened[$key] = $value;
    }

    return $flattened;
}