通用樹形下拉式功能表產生類

來源:互聯網
上載者: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][‘pid‘];        $pid = $this->arr[$pid][‘pid‘];        if(is_array($this->arr))        {            foreach($this->arr as $id => $a)            {                if($a[‘pid‘] == $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[‘pid‘] == $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][‘pid‘];        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;    }     /**    * 得到樹型結構    * @param int ID,表示獲得這個ID下的所有子級    * @param string 產生樹型結構的基本代碼,例如:"<option value=\$id \$selected>\$spacer\$name</option>"    * @param int 被選中的ID,比如在做樹型下拉框的時候需要用到    * @return string    */    function get_tree($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 = $id==$sid ? "selected" : ‘‘;                @extract($a);                eval("\$nstr = \"$str\";");                $this->ret .= $nstr;                $this->get_tree($id,$str,$sid,$adds.$k.‘&nbsp;‘);                $number++;            }        }        return $this->ret;    }}?>

在所有欄目、地區等下拉式功能表中,這個類非常好用。
使用方法:

<?phpinclude("tree.class.php");//具有這個結構的數組,不是這樣的話,可以改類的實現  $list=array(       1 => array(‘id‘=>‘1‘,‘pid‘=>0,‘name‘=>‘一級欄目一‘),       2 => array(‘id‘=>‘2‘,‘pid‘=>0,‘name‘=>‘一級欄目二‘),       3 => array(‘id‘=>‘3‘,‘pid‘=>1,‘name‘=>‘二級欄目一‘),       4 => array(‘id‘=>‘4‘,‘pid‘=>1,‘name‘=>‘二級欄目二‘),       5 => array(‘id‘=>‘5‘,‘pid‘=>2,‘name‘=>‘二級欄目三‘),       6 => array(‘id‘=>‘6‘,‘pid‘=>3,‘name‘=>‘三級欄目一‘),       7 => array(‘id‘=>‘7‘,‘pid‘=>3,‘name‘=>‘三級欄目二‘)     ); $tree=new tree($list); $html="<select name=‘cat‘>"; //格式字串$str="<option value=\$id \$selected>\$spacer\$name</option>"; //返回樹$html.=$tree->get_tree(0,$str); $html.="</select>"; echo($html);?>


通用樹形下拉式功能表產生類

聯繫我們

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