Thinkphp的list_to_tree 實現無限級分類列出所有節點_PHP教程

來源:互聯網
上載者:User

Thinkphp的list_to_tree 實現無限級分類列出所有節點


list_to_tree 使用起來十分方便,詳細可查看手冊。因為我在用的時候需要同時列出所有節點,所以寫了一個遞迴函式,拿出來供大家參考。
public function index(){    Load('extend');            //載入擴充方法    $Category=D('Category');    $list=$Category->order('sort desc')->select();//實現同級節點排序    $list=list_to_tree($list,'id','fid'); //詳細參數見手冊    $list=$this->findChild($list);        dump($list);}protected  function findChild($arr){        static $tree=array();        foreach ($arr as $key=>$val){                $tree[]=$val;                if (isset($val['_child'])){                    $this->findChild($val['_child']);                }                    }    return $tree;}



/** * 把返回的資料集轉換成Tree * @access public * @param array $list 要轉換的資料集 * @param string $pid parent標記欄位 * @param string $level level標記欄位 * @return array */function list_to_tree($list, $pk='id',$pid = 'pid',$child = '_child',$root=0) {    // 建立Tree    $tree = array();    if(is_array($list)) {        // 建立基於主鍵的數組引用        $refer = array();        foreach ($list as $key => $data) {            $refer[$data[$pk]] =& $list[$key];        }        foreach ($list as $key => $data) {            // 判斷是否存在parent            $parentId = $data[$pid];            if ($root == $parentId) {                $tree[] =& $list[$key];            }else{                if (isset($refer[$parentId])) {                    $parent =& $refer[$parentId];                    $parent[$child][] =& $list[$key];                }            }        }    }    return $tree;}/** * 對查詢結果集進行排序 * @access public * @param array $list 查詢結果 * @param string $field 排序的欄位名 * @param array $sortby 排序類型 * asc正向排序 desc逆向排序 nat自然排序 * @return array */function list_sort_by($list,$field, $sortby='asc') {   if(is_array($list)){       $refer = $resultSet = array();       foreach ($list as $i => $data)           $refer[$i] = &$data[$field];       switch ($sortby) {           case 'asc': // 正向排序                asort($refer);                break;           case 'desc':// 逆向排序                arsort($refer);                break;           case 'nat': // 自然排序                natcasesort($refer);                break;       }       foreach ( $refer as $key=> $val)           $resultSet[] = &$list[$key];       return $resultSet;   }   return false;}/** * 在資料列表中搜尋 * @access public * @param array $list 資料列表 * @param mixed $condition 查詢條件 * 支援 array('name'=>$value) 或者 name=$value * @return array */function list_search($list,$condition) {    if(is_string($condition))        parse_str($condition,$condition);    // 返回的結果集合    $resultSet = array();    foreach ($list as $key=>$data){        $find   =   false;        foreach ($condition as $field=>$value){            if(isset($data[$field])) {                if(0 === strpos($value,'/')) {                    $find   =   preg_match($value,$data[$field]);                }elseif($data[$field]==$value){                    $find = true;                }            }        }        if($find)            $resultSet[]     =   &$list[$key];    }    return $resultSet;}



http://www.bkjia.com/PHPjc/847865.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/847865.htmlTechArticleThinkphp的list_to_tree 實現無限級分類列出所有節點 list_to_tree 使用起來十分方便,詳細可查看手冊。因為我在用的時候需要同時列出所有節點...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.