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

代码来自网络, 只是自己用了挺长时间特地拿出来分享给大家.

无平台限制

只需要告知id,parentid,name 即可

/**

* 通用的树型类,可以生成任何树型结构

*/

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->arras $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->arras $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 生成树形结构基本代码, 例如: "\$spacer\$name"

* @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.' .
';

@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.','));

}

}

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值