php 递归树
最编程
2024-07-21 08:46:57
...
PHP中实现递归树的方法可以分为两种,一种是使用递归函数,另一种是使用循环。
下面是使用递归函数实现递归树的示例代码:
function buildTree($data, $parentId = 0, $level = 0) {
$tree = array();
foreach($data as $item) {
if($item['parent_id'] == $parentId) {
$item['level'] = $level;
$item['children'] = buildTree($data, $item['id'], $level + 1);
$tree[] = $item;
}
}
return $tree;
}
这段代码接受三个参数,分别是数据数组、当前节点的父节点ID和当前节点所在的层级。它会递归地构建一个多维数组,代表整个树形结构。每个节点的数据包括它的ID、父节点ID、层级、以及它的子节点数组。当递归到最底层时,子节点数组为空。
下面是使用循环实现递归树的示例代码:
function buildTree($data) {
$tree = array();
$index = array();
foreach($data as $item) {
$index[$item['id']] = $item;
}
foreach($data as $item) {
if(isset($index[$item['parent_id']])) {
$parent = &$index[$item['parent_id']];
if(!isset($parent['children'])) {
$parent['children'] = array();
}
$parent['children'][] = &$item;
} else {
$tree[] = &$item;
}
}
return $tree;
}
这段代码首先遍历一遍数据数组,将每个节点按照它的ID存储到一个索引数组中。然后再遍历一遍数据数组,对于每个节点,如果它有父节点,就把它加入到父节点的子节点数组中,否则就把它加入到根节点数组中。这个过程中使用了引用(&)来避免数组拷贝,从而提高了效率。
无论是使用递归函数还是循环,都可以实现递归树。使用哪种方法取决于个人偏好和具体情况。递归函数代码相对简洁易懂,但是可能会受到PHP递归深度限制的影响。循环代码稍微复杂一些,但是效率更高,也没有递归深度限制的问题。
上一篇: 玩转PHP:实现递归的三种方法
推荐阅读
-
平衡二叉树(AVL 树)的二叉树算法详解
-
LeetCode] 动态编程 - 95.动态编程 - 95.不同的二叉搜索树 II(附完整 Python/C++ 代码) - 基本思想
-
数据结构 - B 树和 B+ 树 - II.
-
LeetCode 问题练习和总结:二叉树的序列化和反序列化 - 297 - 输入:根 = [1,2] 输出: 根[1,2] 提示
-
CTFHUB SQL 技能树 - 字符注入
-
代码随机化算法训练营第 15 天|第 15 天 二叉树
-
PHP通过::访问类
-
数据结构 - 二叉树堆
-
LeetCode Hot100 | Day5 | 二进制树右视图 && 二进制树扩展为链式列表
-
递归神经网络 LSTM 网络