这是我的桌子的假人
现在,如果我想查找每个级别中任何父节点的子节点总数 对于前...
如何使用php实现这一点? 我的代码是 code
答案 0 :(得分:0)
根据我的理解,您应该将表转换为信息丰富的PHP数组,例如:
$a = array(
1 => array(
'children' => array(
array(2, 'left'),
array(3, 'right'),
),
'level' => 0
),
2 => array(
'children' => array(
array(4, 'left'),
array(5, 'right'),
),
'level' => 1
),
...
12 => array(
'children' => array(),
'level' => 3
),
);
这个任务非常简单,只需获取表格然后foreach并将每一行分配到相关的数组中。 这是让所有孩子都有计算的功能:
function getChildrenCount($nodeId, $a, $rootLevel)
{
$leftChildren = array();
$rightChildren = array();
$countCurrentNode = 0;
$level = $a[$nodeId]['level'] - $rootLevel;
if (empty($a[$nodeId]['children'])) {
return array($level => 1);
} else {
foreach ($a[$nodeId]['children'] as $children) {
if ($children[1] == 'left') {
$leftChildren = getChildrenCount($children[0], $a, $rootLevel);
$countCurrentNode++;
}
if ($children[1] == 'right') {
$rightChildren = getChildrenCount($children[0], $a, $rootLevel);
$countCurrentNode++;
}
}
$current = $leftChildren;
foreach ($rightChildren as $rightLevel => $count) {
if (isset($current[$rightLevel])) {
$current[$rightLevel] += $count;
} else {
$current[$rightLevel] = $count;
}
}
$current[$level] = $countCurrentNode;
return $current;
}
}
这个想法是递归遍历每个节点,然后根据它的级别计算子节点数(与根级别相比)
如何致电:
getChildrenCount(2, $a, $a[2]['level'])
它将返回数组(level => count):
array (size=3)
0 => int 2 // level 1
1 => int 3 // level 2
2 => int 3 // Should be removed
然后你应该删除最后一个元素 - 它没用,因为它用来逐级计算孩子。
注意: