原理:多叉树有继承关系,即有上级,每个节点都知道自己的上级是谁。从最尾部的节点数,每数一个,父节点加一,同时把自己有多少子节点告诉父节点。
注意点:从数据库查数据的时候,要倒叙查询,确保最后的数据先被查询
// 这里有一点要注意,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'];
}
}
}