php 将节点解析为树。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 将节点解析为树。相关的知识,希望对你有一定的参考价值。

<?php
/**
 * Created by PhpStorm.
 * User: dailybird
 * Date: 17/6/1
 * Time: 下午11:57
 */


$nodes = [
    [
        'id' => 5,
        'parent_id' => 2
    ],
    [
        'id' => 2,
        'parent_id' => 1
    ],
    [
        'id' => 3,
        'parent_id' => 1
    ],
    [
        'id' => 1,
        'parent_id' => -1
    ],
    [
        'id' => 6,
        'parent_id' => 4
    ],
    [
        'id' => 8,
        'parent_id' => 7
    ],
    [
        'id' => 9,
        'parent_id' => 7
    ],
    [
        'id' => 7,
        'parent_id' => 4
    ],
    [
        'id' => 10,
        'parent_id' => 4
    ],
    [
        'id' => 4,
        'parent_id' => -1
    ],
];


function resolveNodesToTree(&$tree, &$nodes, $parentNode)
{
    foreach ($nodes as $index => $node) {
        if($node['parent_id'] === $parentNode){
            $foo = resolveNodesToTree($tree[$node['id']], $nodes, $node['id']);
            if(!is_null($foo)){
                $node['children'] = $foo;
                $tree[] = $node;
                unset($nodes[$index]);
            }else{
                unset($tree[$node['id']]);
            }
        }
    }
    return $tree;
}

const ROOT_NODE = -1;
$tree = [];
resolveNodesToTree($tree, $nodes, ROOT_NODE);

print_r(json_encode($tree));



以上是关于php 将节点解析为树。的主要内容,如果未能解决你的问题,请参考以下文章

将我的数据库表转换为树并在 php 中获取叶节点

PHP-XML基于流的解析器及其他常用解析器

无向图转换为树

如何将两个父节点连接到一个子节点以及如何务实地为树中的每个节点制作工具提示?在 D3 js (SVG) 中

PHP XML Expat 解析器

为树中的节点添加颜色