欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

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递归深度限制的影响。循环代码稍微复杂一些,但是效率更高,也没有递归深度限制的问题。