在这个问题中,我们的任务是将元素的平面数组转换为分层树状结构。输入数组由具有三个属性的对象组成:id、parentid 和 name。输出应该是一个树结构,其中每个节点代表输入数组中的一个元素,并具有属于它的子节点列表。
为了解决这个问题,我们不能依赖像嵌套集合这样的方法,因为数据库限制。相反,我们利用递归算法来构建树。
$arr = array( array('id' => 100, 'parentid' => 0, 'name' => 'a'), array('id' => 101, 'parentid' => 100, 'name' => 'a'), array('id' => 102, 'parentid' => 101, 'name' => 'a'), array('id' => 103, 'parentid' => 101, 'name' => 'a'), ); $new = array(); foreach ($arr as $a) { $new[$a['parentid']][] = $a; } $tree = createTree($new, array($arr[0]));
第一步,我们循环遍历输入数组并按其parentid对元素进行分组以创建一个新数组,其中每个键代表父级的id ,该值是其子级的数组。随后,我们调用辅助函数 createTree 来递归地构造树。
function createTree(&$list, $parent) { $tree = array(); foreach ($parent as $k => $l) { if (isset($list[$l['id']])) { $l['children'] = createTree($list, $list[$l['id']]); } $tree[] = $l; } return $tree; }
createTree 函数有两个参数:重新组织的数组 $list 和表示树中当前级别的数组 $parent。在函数中,我们迭代 $parent 数组并检查 $list 是否包含当前元素的任何子元素。如果找到子元素,我们会递归调用 createTree 来构建该元素的子树,并将其添加为当前元素的 Children 属性。最后,我们将当前元素追加到 $tree 数组并返回树。
通过遵循此算法,我们可以从提供的数组列表高效地构造树结构,生成之间的层次关系的嵌套表示元素。
以上是如何高效地将平面数组列表转换为层次树结构?的详细内容。更多信息请关注PHP中文网其他相关文章!