无限极分类1:
1 public function judeg($id) 2 { 3 ???$rs = Db::name(‘finance_class‘) -> field(‘parent_code‘) -> where(‘id‘,$id) -> select(); 4 ???$i = 1; 5 ???foreach($rs as $k => $v){ 6 ??? if($v[‘parent_code‘] <> 0){ 7 ??? $i += $this -> judeg($v[‘parent_code‘]); 8 ??????} 9 ???}10 ???return $i;11 }12 13 ?public function cid($id,$pid)14 ?{15 ????$w[‘parent_code‘] = $id;16 ????$rs = Db::name(‘finance_class‘)17 ???????-> field(‘id,code,name,parent_code‘)18 ???????-> where($w)19 ???????-> order(‘code asc‘)20 ???????-> select();21 ????$str = ‘‘;22 ????foreach ($rs as $k => $v) {23 ????????$name = $v[‘name‘];24 ????????$_id = $v[‘id‘];25 ????????$cutOff = ‘‘;26 ????????for($i = 0; $i < $this -> judeg($_id); $i++){27 ???????? $cutOff.=‘-‘;28 ????????}29 ????????if($_id == $pid){30 ???????? $str.=‘<p>他的id=‘.$_id.‘====他的级别‘.$cutOff.$name.‘</p>‘;31 ????????}else{32 ???????? $str.=‘<p>他的id=‘.$_id.‘====他的级别‘.$cutOff.$name.‘</p>‘;33 ????????}34 ????????$str.=$this->cid($_id,$pid);35 ????}36 ????return $str;37}38 public function finance_c()39 {40 ???$w[‘type‘] = ‘资产类‘;41 ???$w[‘parent_code‘] = 0;42 ???$rs = Db::name(‘finance_class‘)43 ????? -> field(‘id,code,name,parent_code‘)44 ????? -> where($w)45 ????????-> select();46 ???$str = ‘‘;47 ???foreach ($rs as $k => $v){48 ??? $str.= ‘<p>一级name:‘.$v[‘name‘].‘</p>‘;49 ??? $str.= ???$this -> cid($v[‘id‘],0);50 ???}51 ???echo $str;52 }
这个方法出来的效率慢,而且很绕。
方法2:
1 public function getVoucherClass() 2 { 3 ????$lists = Db::name(‘finance_class‘)->select(); 4 ?5 ????$lists = $this->getTree($lists); 6 ?7 ????foreach($lists as $value){ 8 ???? echo str_repeat(‘--‘, $value[‘level‘]), $value[‘name‘].‘<br />‘; 9 ????}10}11 12 /**13 * 递归实现无限极分类14 * @param $array 分类数据15 * @param $pid 父ID16 * @param $level17 * @return $list 18 */19 function getTree($array, $pid =0, $level = 0){20 ???static $list = [];21 ???foreach ($array as $key => $value){22 ??? if ($value[‘parent_code‘] == $pid){23 ?????? $value[‘level‘] = $level;24 ?????????$list[] = $value;25 ?????????unset($array[$key]);26 ?????????$this->getTree($array, $value[‘id‘],$level+1);27 ??????}28 ???}29 ???return $list;30}
无限极分类3:
1 public function index() 2 ????{ 3 ???????$lists = \think\Db::table(‘ozyx_finance_class‘)->select(); 4 ???????$lists = $this->getTree($lists,0); 5 ?6 ???????foreach ($lists as $k => $v) { 7 ???????????????$lists_one[$v[‘type‘]][]=$v; 8 ???????} 9 10 ???????// halt($lists_one);11 ???????$this->assign(‘lists‘, $lists_one);12 13 ???????return view();14 ????}15 16 ????/**17 ????* 无限极分类18 ????*/19 ????function getTree($data, $pid)20 ????{21 ????????$tree = ‘‘;22 ????????foreach($data as $k => $v)23 ????????{24 ??????????if($v[‘parent_code‘] == $pid)25 ??????????{ ???????26 ???????????????$v[‘parent_code‘] = $this->getTree($data, $v[‘id‘]);27 ???????????????$tree[] = $v;28 ??????????????????unset($data[$k]);29 ??????????}30 ????????}31 ????????return $tree;32 ????}
数据表结构:
php 无限极分类
原文地址:https://www.cnblogs.com/CcPz/p/9860394.html