首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建树结构所需的PHP递归帮助

创建树结构所需的PHP递归帮助
EN

Stack Overflow用户
提问于 2011-05-11 16:31:35
回答 6查看 3.2K关注 0票数 0

下面是我的一个表结构:

代码语言:javascript
复制
CREATE TABLE menu (
  menuid int(11) NOT NULL AUTO_INCREMENT,
  menuname varchar(100) NOT NULL DEFAULT '',
  menulink varchar(100) NOT NULL DEFAULT '',
  menuparentId int(11) NOT NULL DEFAULT '0',
  menuhasChild smallint(1) NOT NULL DEFAULT '0',
  menustatus smallint(1) NOT NULL DEFAULT '1',
  menuorder int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (menuid)
)

我使用了一个递归函数来创建一个菜单结构,但在这里失败了:

代码语言:javascript
复制
function categoriesTree($id=0){    
    $s = "SELECT * FROM menu  WHERE menuparentId = '".$id."' 
        ORDER BY menuorder, menuid ";
    $rid = $this->db->query($s)->result_array();
    $treeArray = array();
    foreach($rid as $row){
        $treeArray[$row['menuid']] = $row;
        if($row['menuhasChild']==1){
            $treeArray[$row['menuid']] = $this->categoriesTree(); //results in Fatal error: Maximum function nesting level of '100' reached, aborting!
        }
    }
 retrun $treeArray;
 }

此方法是CodeIgniter模型类中模型的一部分。有没有更好的方法来创建这棵树?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-05-11 17:16:38

我认为您必须将id作为参数添加到函数调用中。

代码语言:javascript
复制
$this->categoriesTree($row['menuid']) 

否则,您每次调用的函数都是完全相同的。

票数 2
EN

Stack Overflow用户

发布于 2011-05-11 16:34:36

是的,有一个更好的方法。所谓的改进的预序树遍历算法。你可以通过谷歌搜索找到大量的信息,我相信堆栈溢出也是如此。

这样做的好处是,您只需使用一个查询就可以获取整个子树。选择会很快,但修改会更重。

票数 4
EN

Stack Overflow用户

发布于 2011-11-15 18:42:38

这是最好的例子..这是第一个答案的更正形式。

代码语言:javascript
复制
 function categoriesTree($id=0) {
    $s = "SELECT * FROM design_menu  WHERE menuparentId = '" . $id . "' 
    ORDER BY menuorder, menuid ";
    $rid = $this->db->query($s)->result_array();
    $treeArray = array();

    foreach ($rid as $row) {

        $treeArray[$row['menuid']] = $row;
        if ($row['menuhasChild'] == 1) {
            $treeArray[$row['menuname']] = $this->categoriesTree($row['menuid']); //results in Fatal error: Maximum function nesting level of '100' reached, aborting!
        }
    }
    return $treeArray;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5961377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档