php 无限级分类,超级简单的无限级分类,支持输出树状图,代码来自网络
<?php
error_reporting(E_ALL ^ E_NOTICE);
class Tree
{
/**
+------------------------------------------------
* 生成树型结构所需要的2维数组
+------------------------------------------------
* @author abc
+------------------------------------------------
* @var Array
*/
var $arr = array();
/**
+------------------------------------------------
* 生成树型结构所需修饰符号,可以换成图片
+------------------------------------------------
* @author abc
+------------------------------------------------
* @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 abc
* @param $myid 表示获得这个ID下的所有子级
* @param $str 生成树形结构基本代码, 例如: "<option value=\$id \$select>\$spacer\$name</option>"
* @param $sid 被选中的ID, 比如在做树形下拉框的时候需要用到
* @param $adds
* @param $str_group
*/
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' : '';
@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.','));
}
/**
+------------------------------------------------
* 格式化数组
+------------------------------------------------
* @author abc
+------------------------------------------------
*/
function getArray($myid=0, $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 : '';
@extract($a);
$a['name'] = $spacer.' '.$a['name'];
$this->ret[$a['id']] = $a;
$fd = $adds.$k.' ';
$this->getArray($id, $sid, $fd);
$number++;
}
}
return $this->ret;
}
}
$data=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'=>''),
8 => array('id'=>'8','parentid'=>3,'name'=>'三级栏目三'),
9 => array('id'=>'9','parentid'=>7,'name'=>'四级分类三'),
);
$tree = new Tree;
$tree->tree($data);
// 如果使用数组, 请使用 getArray方法
//$tree->getArray();
// 下拉菜单选项使用 get_tree方法
$html='<select name="tree">';
$str = "<option value=\$id \$select>\$spacer\$name</option>";
$html .= $tree->get_tree(0,$str,-1).'</select>';
echo $html;
?>
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
超喜欢这里的
过来逛逛
点赞是不可能点赞的
测试一下
点个赞
顶
网站挺不错的!
顶
装装逼
点赞是不可能点赞的
主题不错!
测试一下
6666
测试一下
我只是随便看看
稳
我只是随便看看
可以的
就服你
点赞是不可能点赞的
装装逼
网站挺不错的!
哈哈
我只是随便看看
哈哈哈哈哈
主题不错!
过来逛逛
支持一下
测试一下
顶
6666
装装逼
顶
测试一下
支持一下
支持一下
超喜欢这里的
啦啦啦啦
顶
测试一下
稳
就服你
可以的
啦啦啦啦
网站挺不错的!
老哥 我想..
哈哈哈哈哈
可以的
装装逼
稳
6666
点个赞
超喜欢这里的
哈哈
百度来的,网站挺好看的
主题不错!
顶
测试一下
过来逛逛
点赞是不可能点赞的
网站挺不错的!
老哥 我想..
老哥 我想..
主题不错!
点赞是不可能点赞的
6666
测试一下
点赞是不可能点赞的
点赞是不可能点赞的
老哥 我想..
哈哈
哈哈
可以的
主题不错!
6666
过来逛逛
老哥 我想..
啦啦啦啦
超喜欢这里的
稳
测试一下
老哥 我想..
可以的
过来逛逛
超喜欢这里的
啦啦啦啦
啦啦啦啦
主题不错!
就服你
老哥 我想..
网站挺不错的!
稳
支持一下
就服你
牛逼
我只是随便看看
装装逼
就服你
超喜欢这里的
牛逼
就服你
我只是随便看看
牛逼
哈哈哈哈哈
过来逛逛
哈哈
装装逼
可以的
点个赞
装装逼
点赞是不可能点赞的
百度来的,网站挺好看的
稳
主题不错!
测试一下
过来逛逛
可以的
牛逼
过来逛逛
6666
顶
哈哈哈哈哈
网站挺不错的!
就服你
6666
啦啦啦啦
老哥 我想..
超喜欢这里的
啦啦啦啦
牛逼
装装逼
超喜欢这里的
就服你
点个赞
我只是随便看看
测试一下
我只是随便看看
稳
过来逛逛
啦啦啦啦
超喜欢这里的
测试一下
6666
啦啦啦啦
过来逛逛
啦啦啦啦
牛逼
网站挺不错的!
百度来的,网站挺好看的
网站挺不错的!
哈哈
网站挺不错的!
装装逼
啦啦啦啦
稳
点个赞
哈哈
点赞是不可能点赞的
啦啦啦啦
支持一下
稳
顶
老哥 我想..
超喜欢这里的
牛逼
就服你
哈哈
网站挺不错的!
啦啦啦啦
主题不错!
网站挺不错的!
我只是随便看看
哈哈
老哥 我想..
稳
点赞是不可能点赞的
测试一下
主题不错!
点赞是不可能点赞的
6666
网站挺不错的!
哈哈
哈哈
啦啦啦啦
超喜欢这里的
装装逼
可以的
可以的
稳
6666
过来逛逛
超喜欢这里的
主题不错!
6666
点个赞
过来逛逛
我只是随便看看
点个赞
哈哈
测试一下
超喜欢这里的
过来逛逛
顶
就服你
装装逼
老哥 我想..
牛逼
支持一下
顶
支持一下
主题不错!
顶
点赞是不可能点赞的
超喜欢这里的
支持一下
牛逼
测试一下
点赞是不可能点赞的
装装逼
支持一下
主题不错!
点个赞
过来逛逛
就服你
哈哈
超喜欢这里的
主题不错!
过来逛逛
点赞是不可能点赞的
稳
点赞是不可能点赞的
支持一下
点赞是不可能点赞的
顶
装装逼
就服你
点赞是不可能点赞的
6666
我只是随便看看
装装逼
主题不错!
支持一下
超喜欢这里的
6666
装装逼
顶
我只是随便看看
网站挺不错的!
支持一下
装装逼
6666
可以的
网站挺不错的!
网站挺不错的!
老哥 我想..
点赞是不可能点赞的
顶
点个赞
过来逛逛
主题不错!
6666
稳
啦啦啦啦
装装逼
过来逛逛
主题不错!
支持一下
老哥 我想..
主题不错!
点赞是不可能点赞的
可以的
就服你
百度来的,网站挺好看的
6666
可以的
哈哈
可以的
我只是随便看看
啦啦啦啦
超喜欢这里的
超喜欢这里的
支持一下
我只是随便看看
老哥 我想..
点赞是不可能点赞的
就服你
可以的
主题不错!
我只是随便看看
超喜欢这里的
网站挺不错的!
哈哈哈哈哈
点个赞
顶
顶
哈哈哈哈哈
啦啦啦啦
网站挺不错的!
点赞是不可能点赞的
点个赞
稳
点赞是不可能点赞的
百度来的,网站挺好看的
测试一下
测试一下
网站挺不错的!
点个赞
测试一下
牛逼
过来逛逛
哈哈
点个赞
稳
百度来的,网站挺好看的
哈哈
过来逛逛
稳
超喜欢这里的
网站挺不错的!
可以的
牛逼
百度来的,网站挺好看的
点个赞
点个赞
哈哈哈哈哈
稳
主题不错!
老哥 我想..
主题不错!
稳
测试一下
哈哈
百度来的,网站挺好看的
就服你
装装逼
网站挺不错的!
哈哈
稳
点个赞
支持一下
过来逛逛
哈哈
支持一下
测试一下
过来逛逛
哈哈哈哈哈
点赞是不可能点赞的
支持一下
点个赞
啦啦啦啦
点赞是不可能点赞的
可以的
点个赞
可以的
我只是随便看看
老哥 我想..
过来逛逛
啦啦啦啦
主题不错!
网站挺不错的!
装装逼
稳
就服你
主题不错!
测试一下
点个赞
牛逼
网站挺不错的!
点赞是不可能点赞的
百度来的,网站挺好看的
测试一下
稳
我只是随便看看
测试一下
百度来的,网站挺好看的
啦啦啦啦
过来逛逛
可以的
主题不错!
就服你
就服你
支持一下
点赞是不可能点赞的
过来逛逛
哈哈
支持一下
稳
哈哈哈哈哈
点赞是不可能点赞的
稳
可以的
点赞是不可能点赞的
过来逛逛
啦啦啦啦
顶
测试一下
6666
可以的
顶
哈哈哈哈哈
6666
装装逼
稳
装装逼
6666
点赞是不可能点赞的
主题不错!
哈哈哈哈哈
啦啦啦啦
哈哈哈哈哈
哈哈哈哈哈
点赞是不可能点赞的
网站挺不错的!
超喜欢这里的
点赞是不可能点赞的
老哥 我想..
稳
点赞是不可能点赞的
啦啦啦啦
就服你
测试一下
支持一下
网站挺不错的!
点个赞
老哥 我想..
稳
啦啦啦啦
顶
测试一下
点赞是不可能点赞的
我只是随便看看
就服你
装装逼
超喜欢这里的
测试一下
哈哈哈哈哈
哈哈
点个赞
百度来的,网站挺好看的
稳
我只是随便看看
测试一下
就服你
顶
装装逼
啦啦啦啦
稳
测试一下
超喜欢这里的
可以的
顶
测试一下
主题不错!
装装逼
牛逼
网站挺不错的!
点个赞
顶
啦啦啦啦
点个赞
点赞是不可能点赞的
就服你
老哥 我想..
牛逼
老哥 我想..
哈哈哈哈哈
老哥 我想..
老哥 我想..
过来逛逛
哈哈哈哈哈
网站挺不错的!
老哥 我想..
6666
顶
哈哈哈哈哈
牛逼
顶
我只是随便看看
就服你
点赞是不可能点赞的
啦啦啦啦
测试一下
测试一下
点个赞
啦啦啦啦
啦啦啦啦
支持一下
老哥 我想..
百度来的,网站挺好看的
过来逛逛
就服你
过来逛逛
稳
过来逛逛
老哥 我想..
支持一下
装装逼
啦啦啦啦
可以的
可以的
牛掰牛掰,点个赞
哈哈哈哈哈
超喜欢这里的
就服你
装装逼
顶
过来逛逛
还没看完,但是先评论点赞了哈哈哈
百度来的,网站挺好看的
哈哈哈哈哈哈哈哈
6666
测试一下
默默收藏了,悄咪咪评个论
点赞o( ̄▽ ̄)d
………..
………..
可以的
哈哈哈哈哈哈哈哈
学到了,原来还可以这样啊
这篇文章写得真不错,收藏一下~
有点东西哇
哈哈哈哈哈哈哈哈
………..
点赞o( ̄▽ ̄)d
………..
默默收藏了,悄咪咪评个论
点赞o( ̄▽ ̄)d
有点东西哇
学到了,原来还可以这样啊
还没看完,但是先评论点赞了哈哈哈
哈哈哈哈哈哈哈哈
牛掰牛掰,点个赞
牛掰牛掰,点个赞
………..
这篇文章写得真不错,收藏一下~
这篇文章写得真不错,收藏一下~
有点东西哇
哈哈哈哈哈哈哈哈
点赞o( ̄▽ ̄)d
有点东西哇
默默收藏了,悄咪咪评个论
有点东西哇
还没看完,但是先评论点赞了哈哈哈
默默收藏了,悄咪咪评个论
牛掰牛掰,点个赞
有点东西哇
有点东西哇
学到了,原来还可以这样啊
学到了,原来还可以这样啊
还没看完,但是先评论点赞了哈哈哈
牛掰牛掰,点个赞