【问题标题】:Children nodes moved to the root level on an hierarchy array子节点移动到层次结构数组的根级别
【发布时间】:2014-03-28 14:27:27
【问题描述】:

我在层次结构上有以下数组 - 它基本上是一个数组,在“子”键下包含类别及其子项:

Array
    (
        [category_id] => 1
        [parent_id] => 0
        [name] => Commercial
        [child] => Array
            (
                [0] => Array
                    (
                        [category_id] => 48
                        [parent_id] => 1
                        [name] => lights
                        [child] => Array
                            (
                            )
                    )

                [1] => Array
                    (
                        [category_id] => 12
                        [parent_id] => 1
                        [name] => beacons
                        [child] => Array
                            (
                                [0] => Array
                                    (
                                        [category_id] => 91
                                        [parent_id] => 12
                                        [name] => blue beacons
                                        [child] => Array
                                            (
                                            )

                                     )
                            )

                    )
            )
    )

我想要做的是编写一个递归函数来将此数组重组为一个单层数组。我不想将其子项放在“child”键中,而是希望它成为数组根级别的一部分。像这样:

[0] => Array
    (
        [category_id] => 1
        [parent_id] => 0
        [name] => Commercial
    )

[1] => Array
    (
        [category_id] => 48
        [parent_id] => 1
        [name] => lights
    )

[2] => Array
    (
        [category_id] => 12
        [parent_id] => 1
        [name] => beacons
    )


[3] => Array
    (
        [category_id] => 91
        [parent_id] => 12
        [name] => blue beacons
    )

有什么想法吗?

谢谢!

【问题讨论】:

  • 实际上很多。为什么不编写一个重新组织数组的递归函数呢?不过说真的,我们不会为您编写代码。当你 pass the result array by reference 到函数时,你可以一个接一个地添加所有元素,例如。

标签: php arrays recursion tree hierarchy


【解决方案1】:

以下递归函数应该可以满足您的目的:

function one_level_array($arr){
$ret = array();
$ret[] = array_diff_key($arr, array("child" => ""));
    if(array_key_exists("child", $arr)){
        foreach($arr["child"] as $child){
        $ret = array_merge($ret, one_level_array($child));
        }
    }
return $ret;
}

DEMO

【讨论】:

  • 感谢Sharanya,这太完美了。我会根据我的具体情况对其进行一些更改,但这就是我一直在寻找的想法。
猜你喜欢
  • 2021-05-20
  • 1970-01-01
  • 1970-01-01
  • 2012-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-29
  • 1970-01-01
相关资源
最近更新 更多