AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > PHP编程

php无限分类, 支持输出树状图

51自学网 2016-09-17 http://www.wanshiok.com
<?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.'&nbsp;',$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.'&nbsp;');                $number++;            }        }        return $this->ret;    }     function have($list,$item){        return(strpos(',,'.$list.',',','.$item.','));    }}?>



说明
:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。
 
上一篇:PHP编程技巧:看实例学正则表达式  下一篇: php ftp操作封装类