我有一棵巨大的动态生成的树。该树是根据每个元素的“ parent_id”属性从平面数组生成的。例如,最终结果将如下所示:Array( [0] => Array ( [id] => 70 [name] => Top Corp [parent_id] => 0 [children] => Array ( [0] => Array ( [id] => 43 [name] => Department [parent_id] => 70 [children] => Array ( [0] => Array ( [id] => 45 [name] => Building [parent_id] => 43 [children] => Array ( [0] => Array ( [id] => 75 [name] => Office [parent_id] => 45 ) ) )如何仅提取阵列树的一部分?我应该看什么功能或方法?例如,我怎么说另一个子级别(可能深20-30个级别)现在位于顶部。例如,的伪函数sliceTree(45)应产生以下结果,也就是从树开始id 45[0] => Array ( [id] => 45 [name] => Building [parent_id] => 43 [children] => Array ( [0] => Array ( [id] => 75 [name] => Office [parent_id] => 45 ) ) )没有办法知道树可以走多深,因此它的解决方案需要递归。我曾尝试循环数组,寻找起始ID,但是我不确定在找到该点之后如何继续执行。哪个有效,但仅适用于顶级元素。我该如何递归并解释儿童的多个层次?
1 回答
白衣染霜花
TA贡献1796条经验 获得超10个赞
该sliceTree()函数基本上会查找某个确定id值并将其返回。像这样的东西:
function sliceTree($tree, $branchId)
{
// check all branches
foreach ($tree as $branch) {
// have we found the correct branch?
if ($branch['id'] == $branchId) return $branch;
// check the children
if (isset($branch['children'])) {
$slice = sliceTree($branch['children'], $branchId);
if (isset($slice)) return $slice;
}
}
// nothing was found
return null;
}
如您所见,该例程是递归的。代码未经测试。
我为混合的隐喻感到抱歉:分支机构和子级,但是您是从头开始的。
此功能比我希望的要复杂一些,因为在您的示例中,children当没有子代时该键不存在。我通常希望它在那里并且该值是一个空数组。
- 1 回答
- 0 关注
- 165 浏览
添加回答
举报
0/150
提交
取消