【问题标题】:Flatten Array php展平数组 php
【发布时间】:2021-11-15 13:29:48
【问题描述】:

我正在尝试将多维数组扁平化为给定的特定格式。 我有一棵树,它保存为嵌套数组,这没问题,但在 UI 中呈现数组的函数只需要一个数组,并且每个孩子都有一个独立的数组。每个选项都应该在同一级别,而不是嵌套数组。

这就是我的数组的 var_dump:

(
    [id] => 1
    [name] => some data.
    [emoji] => ????
    [parent_id] => 
    [children] => Array
        (
            [0] => Array
                (
                    [id] => 2
                    [name] => Food
                    [emoji] => ????
                    [parent_id] => 1
                    [children] => Array
                        (
                        )

                )

            [1] => Array
                (
                    [id] => 3
                    [name] => some other data
                    [emoji] => ????
                    [parent_id] => 1
                    [children] => Array
                        (
                            [0] => Array
                                (
                                    [id] => 4
                                    [name] => Massages
                                    [emoji] => ????
                                    [parent_id] => 3
                                    [children] => Array
                                        (
                                        )

                                )

                            [1] => Array
                                (
                                    [id] => 5
                                    [name] => Games
                                    [emoji] => ????
                                    [parent_id] => 3
                                    [children] => Array
                                        (
                                        )

                                )

                        )

                )
            )

        )
    )

而预期的结果应该是:

0] => Array
        (
            [id] => 1
            [name] => Rusty Corp.
            [emoji] => ????
            [parent_id] => 
        )

    [1] => Array
        (
            [id] => 2
            [name] => Food
            [emoji] => ????
            [parent_id] => 1
        )

    [2] => Array
        (
            [id] => 3
            [name] => Canine Therapy
            [emoji] => ????
            [parent_id] => 1
        )

    [3] => Array
        (
            [id] => 4
            [name] => Massages
            [emoji] => ????
            [parent_id] => 3
        )

    [4] => Array
        (
            [id] => 5
            [name] => Games
            [emoji] => ????
            [parent_id] => 3
        )

我尝试了不同的方法,例如 array_merge 或自定义展平函数,但无法达到预期的结果,有什么建议吗?

编辑:

这是我的扁平化功能:

private function flatten_array( array $array ) {
        $return = array();
        array_walk_recursive(
            $array,
            function( $a ) use ( &$return ) { 
                $return[] = $a;
            }
        );
        return $return;
    }

【问题讨论】:

  • 你能发布你的代码吗,到目前为止你尝试了什么?

标签: php arrays for-loop


【解决方案1】:

这是一个递归函数,它将展平数组,它不会考虑根元素上parent_id 的空值。此外,展平的数组将从数组开头的嵌套最多的元素和末尾的根元素开始。

function flatten_array($array, $flattened = []) {
    $current = [];
    foreach ($array as $key => $value) {
        if (is_array($value))
            $flattened = array_merge($flattened, flatten_array($value));
        else
            $current[$key] = $value;
    }
    $flattened[] = $current;
    return array_filter($flattened);
}

【讨论】:

    猜你喜欢
    • 2011-02-11
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 2013-09-12
    • 2014-05-21
    • 1970-01-01
    • 2015-04-08
    • 2013-06-13
    相关资源
    最近更新 更多