龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

php 无限级菜单父节点查询所有子节点

时间:2014-07-10 15:08来源:网络整理 作者:网络 点击:
分享到:
无限级菜单父节点查询所有子节点 [代码片段(94行)]
<?php

class Tree{
    static public $treeList=array();//
    static public $childNode=array();//

    //
    public function create($data,$pid = 0,$level = 1){
        foreach($data as $key => $value){
            if($value['pid']==$pid){
                $value['level'] = $level;
                self::$treeList[] = $value;
                unset($data[$key]);
                self::create($data,$value['id'],$level+1);
            }
        }
        return self::$treeList;
    }
    /******************************************************************************/
    /**
     * 
     * @param int $tid  treeID
     */
    public function findChild($tid){
        self::$childNode[]=(int)$tid;
        $tree=M('Tree');
        $map['id']=array('eq',$tid);
        $allTree=$tree->field('id,pid')->select();    //tree
        self::findArrayNode($tid, $allTree);
        return self::$childNode;//
    }

    /**
     * 
     * @param int $id   ID
     * @param array $list   treeid,pid
     */
    public function findArrayNode($id,$list){
        foreach ($list as $key => $val){
            if ($id==$val['pid']){
                self::$childNode[]=(int)$val['id'];
                self::findArrayNode($val['id'], $list);     //ID
            }
        }
    }

    /******************************************************************************/

    //findChild()sql,news
    public function createSql($arr=array()){
        $sql="";
        foreach ($arr as $key => $val){
            $sql.="tid=$val or ";
        }
        $sql=trim($sql);        //
        $sql=trim($sql,'or');   //or
        $sql=trim($sql);        //
        return $sql;
    }

    /******************************************************************************/

    /**
     * tidwheresql 
     * @param int $tid
     */
    public function getSql($tid){
        return self::createSql(self::findChild($tid));      
    }

}

/*

    import('ORG.Util.Tree');
    $list=Tree::create($data);

    id  pid
    1  0
    2  0
    3  1
    4   3

    id pid level
    1 0  1
    3 1 2
    4 3  3
    2 0 1 
*/
?>
//该片段来自于http://outofmemory.cn
精彩图集

赞助商链接