无限极分类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 父ID
16 * @param $level
17 * @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 }
数据表结构: