zoukankan      html  css  js  c++  java
  • php 无限极分类

    无限极分类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 = 	hinkDb::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     }

    数据表结构:

  • 相关阅读:
    c语言中的rewind函数,Win CE 不支持,可用fseek函数替换
    接口隔离原则(转)
    接口设计的 11 种原则 (转)
    设计模式六大原则/接口设计六大原则 之 组合/聚集复用原则(转)
    C++ 求幂的运算符是什么?
    设计模式六大原则/接口设计六大原则 之 迪米特法则(转)
    解决mysql出现“the table is full”的问题
    tomcat远程调试设置
    这些习惯很伤肾 要警觉
    从ie临时文件夹一次复制多个文件
  • 原文地址:https://www.cnblogs.com/CcPz/p/9860394.html
Copyright © 2011-2022 走看看