多叉树,统计每个节点的子节点的个数。

本文介绍了一种处理多叉树结构数据的算法,通过倒叙查询数据库并利用foreach循环,实现了从子节点到父节点的数据累加过程。此方法确保了每个节点在报告其存在前,已知悉所有直接下级数量。

原理:多叉树有继承关系,即有上级,每个节点都知道自己的上级是谁。从最尾部的节点数,每数一个,父节点加一,同时把自己有多少子节点告诉父节点。

注意点:从数据库查数据的时候,要倒叙查询,确保最后的数据先被查询

       // 这里有一点要注意,foreach 中的$user并不是最新的,所以用引用来找到最新的,一个数组连续两次用foreach的话,要换一下item,不然有问题
       foreach ($users as  &$user) {
            if(isset($users[$user['pid']])){
                // 向父节点报告自己的存在
                if(isset($users[$user['pid']]['sum'])) {
                    $users[$user['pid']]['sum']++;
                } else {
                    $users[$user['pid']]['sum']=1;
                }
                // 查询自己直接下级的数量,并向上累计。在这里,当前节点的下级一定全部查询完了,因为下级的id肯定比当前节点大,而数据又是按照id倒序查询的。
                if (isset($user['sum'])) {
                    $users[$user['pid']]['sum'] += $user['sum'];
                }
            }
        }

 

转载于:https://my.oschina.net/liuxiaofan0/blog/1929264

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值