php無限分類, 支援輸出樹狀圖

來源:互聯網
上載者:User

<?php/*** 通用的樹型類,可以產生任何樹型結構*/class tree{/*** 產生樹型結構所需要的2維數組* @var array*/var $arr = array();/*** 產生樹型結構所需修飾符號,可以換成圖片* @var array*/var $icon = array('│','├','└');/*** @access private*/var $ret = '';/*** 建構函式,初始化類* @param array 2維數組,例如:* array(* 1 => array('id'=>'1','parentid'=>0,'name'=>'一級欄目一'),* 2 => array('id'=>'2','parentid'=>0,'name'=>'一級欄目二'),* 3 => array('id'=>'3','parentid'=>1,'name'=>'二級欄目一'),* 4 => array('id'=>'4','parentid'=>1,'name'=>'二級欄目二'),* 5 => array('id'=>'5','parentid'=>2,'name'=>'二級欄目三'),* 6 => array('id'=>'6','parentid'=>3,'name'=>'三級欄目一'),* 7 => array('id'=>'7','parentid'=>3,'name'=>'三級欄目二')* )*/function tree($arr=array()){ $this->arr = $arr; $this->ret = ''; return is_array($arr);} /*** 得到父級數組* @param int* @return array*/function get_parent($myid){$newarr = array();if(!isset($this->arr[$myid])) return false;$pid = $this->arr[$myid]['parentid'];$pid = $this->arr[$pid]['parentid'];if(is_array($this->arr)){foreach($this->arr as $id => $a){if($a['parentid'] == $pid) $newarr[$id] = $a;}}return $newarr;} /*** 得到子級數組* @param int* @return array*/function get_child($myid){$a = $newarr = array();if(is_array($this->arr)){foreach($this->arr as $id => $a){if($a['parentid'] == $myid) $newarr[$id] = $a;}}return $newarr ? $newarr : false;} /*** 得到當前位置數組* @param int* @return array*/function get_pos($myid,&$newarr){$a = array();if(!isset($this->arr[$myid])) return false; $newarr[] = $this->arr[$myid];$pid = $this->arr[$myid]['parentid'];if(isset($this->arr[$pid])){ $this->get_pos($pid,$newarr);}if(is_array($newarr)){krsort($newarr);foreach($newarr as $v){$a[$v['id']] = $v;}}return $a;}/** * ------------------------------------- * 得到樹型結構 * ------------------------------------- * @author Midnight(楊雲洲), yangyunzhou@foxmail.com * @param $myid 表示獲得這個ID下的所有子級 * @param $str 產生樹形結構基本代碼, 例如: "<option value=\$id \$select>\$spacer\$name</option>" * @param $sid 被選中的ID, 比如在做樹形下拉框的時候需要用到 * @param $adds * @param $str_group * @return unknown_type */function get_tree($myid, $str, $sid = 0, $adds = '', $str_group = ''){$number=1;$child = $this->get_child($myid);if(is_array($child)){ $total = count($child);foreach($child as $id=>$a){$j=$k='';if($number==$total){$j .= $this->icon[2];}else{$j .= $this->icon[1];$k = $adds ? $this->icon[0] : '';}$spacer = $adds ? $adds.$j : '';$selected = $id==$sid ? 'selected' : '';@extract($a);$parentid == 0 && $str_group ? eval("\$nstr = \"$str_group\";") : eval("\$nstr = \"$str\";");$this->ret .= $nstr;$this->get_tree($id, $str, $sid, $adds.$k.' ',$str_group);$number++;}}return $this->ret;} /*** 同上一方法類似,但允許多選*/function get_tree_multi($myid, $str, $sid = 0, $adds = ''){$number=1;$child = $this->get_child($myid);if(is_array($child)){ $total = count($child);foreach($child as $id=>$a){$j=$k='';if($number==$total){$j .= $this->icon[2];}else{$j .= $this->icon[1];$k = $adds ? $this->icon[0] : '';}$spacer = $adds ? $adds.$j : '';$selected = $this->have($sid,$id) ? 'selected' : '';//echo $sid.'=>'.$id.' : '.$selected.' . <br/>';@extract($a);eval("\$nstr = \"$str\";");$this->ret .= $nstr;$this->get_tree_multi($id, $str, $sid, $adds.$k.' ');$number++;}}return $this->ret;}function have($list,$item){return(strpos(',,'.$list.',',','.$item.','));}}?>



相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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