首页 > php教程 > php手册 > 递归 加引用 实现tree 和 无限级菜单

递归 加引用 实现tree 和 无限级菜单

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
发布: 2016-06-13 10:58:47
原创
869 人浏览过

class k_model_menu_menu

{

    private $data = array();

    private $rdata = array();

    private $jdata = array();

    private $level = 0;

    private $paret = array();

    function getOption($type= 'part',$pid = 0)

    {

        if($type = 'all') $this->data= R::getAll( 'select * from menu' );

        

        $this->teamData();

        

        if($this->rdata) return $this->rdata;

        return false;     

    }

    

    function addMenu($data){

        foreach($data as $key =>$value){

            if($value == '请填写内容!') $data[$key]='';

        }

        if($data){

            $menu = R::dispense('menu');

            $menu->pid = $data['pid'];

            $menu->name = $data['name'];

            $menu->url = $data['url'];

            $menu->icon = $data['icon'];

            $id = R::store($menu);

            return $id;

        }

    }

    //返回json 字符串

    public function getJsonMenu(){

        $data = $this->getChild(1);

        $this->jdata = $data;

        $this->recursive($this->jdata);

        return  json_encode($this->jdata);

    }

        

    //递归函数  实现不断的生成子节点,用了引用,感觉这引用是如来神笔,要不然实现太复杂了

    public function recursive(&$data = array()){

        foreach($data as $key =>$value){

            $data[$key]['children']= $this->getChild($value['id']);

            $tmp = &$data[$key]['children'];

            if($tmp){

                $this->recursive($tmp);

            }

        }

    }

    

    //组织数据,用于生成树形的select 返回的是一个数组

    //数组的形式是

        public function teamData($pid=1){

            foreach ($this->data as $key => $value) {    

                if($value['pid']==$pid){

                        $this->level++;

                        array_push($this->rdata, array('name'=>$value['name'],'level'=>$this->level,'id'=>$value['id']));

                                

                    $tmpdata = $this->teamData($value['id']);

                    if(!$tmpdata){

                        $this->level--;

                        continue;

                    }

                }

            }    

        }

        

    

    //根据pid拿取下面的子数据

    public function getChild($pid){

         $data=  R::getAll( "select * from menu where pid = {$pid}" );

         $tmpdata = array();

         if($data){

             foreach ($data as $key => $value) {

                 $tmpdata[$key]['id'] =  $value['id'];

                 $tmpdata[$key]['icon'] =  $value['icon'];

                 $tmpdata[$key]['text'] =  $value['name'];

                 $tmpdata[$key]['url'] =  $value['url'];

                 $tmpdata[$key]['children'] =  array();

             }

         }

         return $tmpdata;

    }

    

    

}

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
php递归疑惑?
来自于 1970-01-01 08:00:00
0
0
0
javascript - 关于json数组递归的问题
来自于 1970-01-01 08:00:00
0
0
0
php做仿微博评论回复功能(递归思路)
来自于 1970-01-01 08:00:00
0
0
0
Vue.js 3中的单文件组件中的递归
来自于 1970-01-01 08:00:00
0
0
0
javascript - 递归算法问题.
来自于 1970-01-01 08:00:00
0
0
0
热门推荐
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板