一个高效的数组转树结构的算法实现

<?php
// authorwangbinandi@gmail.com
function addNode(&$node, &$tree) {
    $node_id = $node['id'];
    if (!isset($tree[$node_id])) {
        $tree[$node_id] = $node;
        $tree[$node_id]['sub'] = [];
        $node['ref'] = & $tree[$node_id];
    }
}

function addNodeWithParent(&$node, &$nodes, &$tree) {
    $pid = $node['pid'];
    if ($pid == 0) {
        addNode($node, $tree);
    } else {
        $pnode = & $nodes[$pid];
        if (!isset($pnode['ref'])) {
            addNodeWithParent($pnode, $nodes, $tree);
        }
        addNode($node, $pnode['ref']['sub']);
    }
}
// 数组可以无序,必须要索引
$nodes = [ 5 => ['id' => 5, 'name' => 'node5', 'pid' => 3], 1 => ['id' => 1, 'name' => 'node1', 'pid' => 0], 2 => ['id' => 2, 'name' => 'node2', 'pid' => 0], 3 => ['id' => 3, 'name' => 'node3', 'pid' => 1], 4 => ['id' => 4, 'name' => 'node4', 'pid' => 1], 6 => ['id' => 6, 'name' => 'node6', 'pid' => 2], 7 => ['id' => 7, 'name' => 'node7', 'pid' => 2], 8 => ['id' => 8, 'name' => 'node8', 'pid' => 0], ]; $tree = []; foreach($nodes as $i => &$node) { addNodeWithParent($node, $nodes, $tree); } var_dump($tree);

 

转载于:https://www.cnblogs.com/andiwang/p/6351320.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值