PHP 在無限級歸類情況下,通過介面取出所有分類之後產生分類樹

來源:互聯網
上載者:User
PHP 在無限級分類情況下,通過介面取出所有分類之後產生分類樹

應用情境:

通過web介面擷取到無限分類部門的資料,部門資料解析出來的格式為一個二維數組。由於是自己臨時寫了一個簡易的小架構,未加入緩衝機制,因此只能一下把部門全部展示到頁面上,可遞迴實現,但複雜度太高。


解決方案:

前提還是使用遞迴方法進行操作,只不過對通過介面擷取的資料產生一個新的三維數組,然後進行遞迴操作,複雜度比較低。(若有大神有更加簡單的方法,請解答,拜謝。)


實現方法:

1、處理通過介面擷取到的資料。

/* * 將拉取到的部門資料處理成三維數組 * @param $dept array json解析出來的數組 * @return array * */function dept_enarray($dept = array()){    $dept_array = array();    foreach($dept as $key => $val){        if($val['parentno']){            $dept_array[$val['parentno']][0][] = $val;        }else{            $dept_array[0][] = $val;        }    }    return $dept_array;}

2、對處理得到的三維數組進行遞迴操作,然後產生html。

/* * 構建組織部門樹 * @param $orgdept array dept_enarray函數處理過的數組 * @param $html    string html標籤內容 * @param $lv      int    當前的操作等級 * @param $parentarr array 擁有子部門的部門編碼 * @param $orgarr  array   原始傳入的數組 * return string html * */function get_depttree($orgdept,$html = '',$lv=1, $parentarr = '', $orgarr = ''){    $vl = $lv;    if(!$orgarr)        $orgarr = $orgdept;    if(!$parentarr && $lv == 1)        $parentarr = array_keys($orgdept);    foreach($orgdept[0] as $key=>$val){        if(!in_array($val['deptno'],$parentarr))            $disvisiable = ' class="disvisiable" ';        else            $disvisiable = '';        if($lv == 1 ){            $html .= '
 
'.$val['name'].'
  • 添加子部門
  • 新增成員
  • 編輯部門
  • 刪除部門
'; }else{ $html .= '
'.$val['name'].'
  • 添加子部門
  • 新增成員
  • 編輯部門
  • 刪除部門
'; } if(in_array($val['deptno'], $parentarr)){ $html = get_depttree($orgarr[$val['deptno']],$html,++$vl,$parentarr,$orgarr); } if($lv == 1) $html .= '
'; } return $html;}

最後實現的html效果如下。



PS:若有大神有更好的解決方案,求留言,拜謝。





  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.