PHP实现无限极分类,引用实现无限极分类

引用实现无限极分类

function generateTree($array){
    //第一步 构造数据
    $items = array();
    foreach($array as $value){
        $items[$value['id']] = $value;
    }
    //第二部 遍历数据 生成树状结构
    $tree = array();
    foreach($items as $key => $value){
        if(isset($items[$value['pid']])){
            $items[$value['pid']]['son'][] = &$items[$key];
        }else{
            $tree[] = &$items[$key];
        }
    }
    return $tree;
}


//递归性能差,引用效果更加

function generateTree($data)
{
    $items = array();
    foreach ($data as $v) {
        $items[$v['id']] = $v;
    }

    $tree = array();
    foreach ($items as $k => $item) {
        if (isset($items[$item['pid']])) {
            $items[$item['pid']]['son'][] = &$items[$k];
        } else {
            $tree[] = &$items[$k];
        }
    }
    return $tree;
}

效果

Array
(
    [0] => Array
        (
            [id] => 1
            [pid] => 0
            [uid] => 2
            [msg] => 哈啊
            [action_id] => 1
            [time] => 2020-09-23 19:06:32
            [son] => Array
                (
                    [0] => Array
                        (
                            [id] => 2
                            [pid] => 1
                            [uid] => 1
                            [msg] => 哈?
                            [action_id] => 1
                            [time] => 2020-09-23 19:07:17
                            [son] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 4
                                            [pid] => 2
                                            [uid] => 1
                                            [msg] => 666
                                            [action_id] => 1
                                            [time] => 2020-09-23 19:09:01
                                            [son] => Array
                                                (
                                                    [0] => Array
                                                        (
                                                            [id] => 5
                                                            [pid] => 4
                                                            [uid] => 3
                                                            [msg] => cdfgh
                                                            [action_id] => 1
                                                            [time] => 2020-09-24 10:05:37
                                                        )

                                                )

                                        )

                                )

                        )

                )

        )

    [1] => Array
        (
            [id] => 3
            [pid] => 0
            [uid] => 3
            [msg] => 66
            [action_id] => 1
            [time] => 2020-09-23 19:07:35
        )

)

 

 

 

 

php最简单的无限极分类

 

先看看二级分类是如何实现的:

数据库:

 

php代码:

tp3.2测试的

 public function index(){
        $db = D('listname');
        $arr_a = $db->where(array('ishidden'=>1,'parentid'=>0))->select();
        foreach($arr_a as $k=>$v){
          $arr_b = $db->where(array('ishidden'=>1,'parentid'=>$v['id']))->select();
           $arr_a[$k]['son']=$arr_b;
        }
        $this->assign('arr',$arr_a);

        $this->display();
    }

 

    <volist name="arr" id="vo">
        <dl id="menu-member">
            <dt><i class="Hui-iconfont">&#xe60d;</i> {$vo.listname}<i class="Hui-iconfont menu_dropdown-arrow">&#xe6d5;</i></dt>
            <dd>
                <ul>
                    <volist name="vo.son" id="va">
                    <li><a data-href="member-list.html" data-title="{$va.listname}" href="javascript:;">{$va.listname}</a></li>
                    </volist>
                </ul>
            </dd>
        </dl>
        </volist>

效果

 

这个是无限极分类

CI框架测试的

 下面是数据库:

CREATE TABLE `listname` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `listname` varchar(64) NOT NULL,
  `parentid` int(10) NOT NULL,
  `ishidden` tinyint(2) NOT NULL DEFAULT '1' COMMENT '1不隐藏   2隐藏',
  `sort` tinyint(3) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=16 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of listname
-- ----------------------------
INSERT INTO `listname` VALUES ('1', '文章管理', '0', '1', '1');
INSERT INTO `listname` VALUES ('2', '词库管理', '0', '1', '2');
INSERT INTO `listname` VALUES ('3', '采集管理', '0', '1', '3');
INSERT INTO `listname` VALUES ('4', '网站管理', '0', '1', '4');
INSERT INTO `listname` VALUES ('5', '文章列表', '1', '1', '0');
INSERT INTO `listname` VALUES ('6', '关键词列表', '2', '1', '0');
INSERT INTO `listname` VALUES ('7', '采集规则设置', '3', '1', '0');
INSERT INTO `listname` VALUES ('8', '采集规则详情', '3', '1', '0');
INSERT INTO `listname` VALUES ('9', '推送设置', '3', '1', '0');
INSERT INTO `listname` VALUES ('11', '网站基本设置', '4', '1', '0');
INSERT INTO `listname` VALUES ('12', '用户管理', '0', '1', '0');
INSERT INTO `listname` VALUES ('13', '用户列表', '12', '1', '5');
INSERT INTO `listname` VALUES ('14', '修改密码', '12', '1', '0');

 

 代码:

	public function index(){
		
	$sql = "select * from listname";
	$res = $this->db->query($sql);
	$arr = $res->result_array();
	
	$res = $this->getTree($arr);
	
	
    foreach($res as $value){
       echo str_repeat('--', $value['level']), $value['listname'].'<br />';
    }
	
	echo '<pre>';
	print_r($res);
	exit;
	
	 $this->load->view('home/index');
	 
	 
	 
	}
	
	
	public function getTree($array, $pid =0, $level = 0){

        //声明静态数组,避免递归调用时,多次声明导致数组覆盖
        static $list = [];
        foreach ($array as $key => $value){
            //第一次遍历,找到父节点为根节点的节点 也就是pid=0的节点
            if ($value['parentid'] == $pid){
                //父节点为根节点的节点,级别为0,也就是第一级
                $value['level'] = $level;
                //把数组放到list中
                $list[] = $value;
                //把这个节点从数组中移除,减少后续递归消耗
                unset($array[$key]);
                //开始递归,查找父ID为该节点ID的节点,级别则为原级别+1
              $this->getTree($array, $value['id'], $level+1);

            }
        }
        return $list;
    }

输出结果:

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值