当前位置: 首页 > 面试题库 >

用PHP中的平面数组构建树

阎功
2023-03-14
问题内容

我环顾了互联网,但还没有完全找到想要的东西。我有一个平面数组,每个元素包含一个“ id”和一个“
parent_id”。每个元素只有一个父元素,但可能有多个子元素。如果parent_id =
0,则将其视为根级项目。我正在尝试将平面阵列变成一棵树。我发现的其他示例仅将元素复制到父元素,但原始元素仍然存在。

编辑

起始数组的每个元素都是从单独的XML文件中读取的。如果文件本身没有父文件,则其父文件ID的值将为‘0’。键实际上是字符串。

对不起,我很困惑。希望这更加清楚:

/编辑

我的起始数组:

数组
(
    [_319_] =>数组
        (
            [id] => 0
            [parent_id] => 0
        )

    [_320_] =>数组
        (
            [id] => _320_
            [parent_id] => 0
        )

    [_321_] =>数组
        (
            [id] => _321_
            [parent_id] => _320_
        )

    [_322_] =>数组
        (
            [id] => _322_
            [parent_id] => _321_
        )

    [_323_] =>数组
        (
            [id] => _323_
            [parent_id] => 0
        )

    [_324_] =>数组
        (
            [id] => _324_
            [parent_id] => _323_
        )

    [_325_] =>数组
        (
            [id] => _325_
            [parent_id] => _320_
        )
)

树之后的结果数组:

数组
(
    [_319_] =>数组
        (
            [id] => _319_
            [parent_id] => 0
        )

    [_320_] =>数组
        (
            [id] => _320_
            [parent_id] => 0
            [children] =>数组
                (
                    [_321_] =>数组
                        (
                            [id] => _321_
                            [parent_id] => _320_
                            [children] =>数组
                                (
                                    [_322_] =>数组
                                        (
                                            [id] => _322_
                                            [parent_id] => _321_
                                        )
                                )
                        )
                    [_325_] =>数组
                        (
                            [id] => _325_
                            [parent_id] => _320_
                        )
                )
    [_323_] =>数组
        (
            [id] => _323_
            [parent_id] => 0
            [children] =>数组
                (
                    [_324_] =>数组
                        (
                            [id] => _324_
                            [parent_id] => _323_
                        )
                )
        )

任何帮助/指导都将不胜感激!

到目前为止,我有一些代码:

        函数buildTree(array&$ elements,$ parentId = 0){
        $ branch = array();

        foreach(将$ elements作为$ element){
            如果($ element ['parent_id'] == $ parentId){
                $ children = $ this-> buildTree($ elements,$ element ['id']);
                如果($ children){
                    $ element ['children'] = $ children;
                }
                $ branch [] = $ element;
            }
        }

        返回$ branch;
    }

问题答案:

你忘了unset()那里的兄弟。

function buildTree(array &$elements, $parentId = 0) {
    $branch = array();

    foreach ($elements as $element) {
        if ($element['parent_id'] == $parentId) {
            $children = buildTree($elements, $element['id']);
            if ($children) {
                $element['children'] = $children;
            }
            $branch[$element['id']] = $element;
            unset($elements[$element['id']]);
        }
    }
    return $branch;
}


 类似资料:
  • 问题内容: 我有一个复杂的json文件,必须使用javascript处理才能使其具有层次结构,以便稍后构建树。json的每个条目都具有:id:唯一ID,parentId:父节点的id(如果节点是树的根,则为0)level:树中的深度级别 json数据已被“排序”。我的意思是,条目上方将具有父节点或兄弟节点,而其下将具有子节点或兄弟节点。 输入: 预期产量: 问题答案: 如果使用地图查找,则有一个有

  • 我有一个复杂的json文件,我必须用javascript处理它,使它具有层次结构,以便以后构建一个树。json的每个条目都有:id:唯一的id,parentId:父节点的id(如果节点是树的根,则为0)level:树中的深度级别 json数据已经“有序”了。我的意思是,一个条目的上面有一个父节点或兄弟节点,下面有一个子节点或兄弟节点。 输入: 预期产出:

  • 我想从平面数组构建一个树形数组: 下面是平面数组: NB:id=节点id;pid=父节点id。 我想将其转换为这个数组: 我试图使用递归函数来实现预期的结果,但我正在寻找更好的方法。谢谢你的回复。

  • 问题内容: 我正在寻找PHP函数的名称,以从键值对数组构建查询字符串。请注意,我正在寻找 内置的PHP 函数来执行此操作,而不是自制程序(这就是所有Google搜索似乎返回的结果)。有一个,我只是不记得它的名字或在php.net上找到它。IIRC的名称不是那么直观。 问题答案: 您正在寻找。

  • 我想写一个函数,可以对给定的数组进行深度展平。例如: 我尝试递归地解决这个问题,到目前为止,我得到了: 然而,这只会将非数组元素推向结果,并完全忽略串联部分。我该如何解决这个问题,或者有没有更好的方法来编写这个函数,而无需任何外部库的帮助?

  • 问题内容: 我试图在尝试对6参数函数进行任何复杂操作之前,遍历6参数函数的参数空间,以研究其数值行为,因此,我正在寻找一种有效的方法来执行此操作。 我的函数将6-dim numpy数组中给出的浮点值作为输入。我最初尝试做的是: 首先,我创建了一个函数,该函数接受2个数组并生成一个包含两个数组中值的所有组合的数组: 然后,我曾经将其应用于同一数组的m个副本: 最后,我这样评估我的功能: 这工作,但它