通用树形类:
使用方法:
效果:
/**
* 通用的树型类,可以生成任何树型结构
*/
class Tree {
/**
* 生成树型结构所需要的2维数组
* @var array
*/
public $arr = array();
/**
* 生成树型结构所需修饰符号,可以换成图片
* @var array
*/
public $icon = array('│', '├', '└');
public $nbsp = " ";
private $str ='';
/**
* @access private
*/
public $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'=>'二级栏目三'),
* )
*/
public function init($arr=array()) {
if(is_array($arr)) $this->arr = $arr;
}
/**
* 得到父级数组
* @param int
* @return array
*/
public 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
*/
public function get_child($myid) {
$child = array();
if (count($this->arr)>0) {
foreach ($this->arr as $k => $v) {
if ($v['parentid'] == $myid)
$child[] = $v;
}
}
return $child;
}
/**
* 得到当前位置数组
* @param int
* @return array
*/
public 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;
}
/**
* 得到树型结构
* @param int ID,表示获得这个ID下的所有子级
* @param string 生成树型结构的基本代码,例如:"<option value=\$id \$selected>\$spacer\$name</option>"
* @param int 被选中的ID,比如在做树型下拉框的时候需要用到
* @return string
*/
public 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 => $value) {
$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($value);
$parentid == 0 && $str_group ? eval("\$nstr = \"$str_group\";") : eval("\$nstr = \"$str\";");
$this->ret .= $nstr;
$nbsp = $this->nbsp;
$this->get_tree($id, $str, $sid, $adds . $k . $nbsp, $str_group);
$number++;
}
}
return $this->ret;
}
/**
* 得到树型表格列表数组
* @param int ID,表示获得这个ID下的所有子级
* @param string $adds 列表前缀符号
* @return array
*/
public function get_tree_list($id,$adds='') {
$treeList=array();
$number = 1;//一级栏目
$child = $this->get_child($id);
$count=count($child);
if ($count>0) {
foreach ($child as $val) {
$j = $k = '';
if ($number == $count) {
$j .= $this->icon[2];
} else {
$j .= $this->icon[1];
$k = $adds ? $this->icon[0] : '';
}
$spacer = $adds ? $adds . $j : '';
$val['spacer']=$spacer;
$treeList[]=$val;
$a=$this->get_tree_list($val['id'],$adds.$k.$this->nbsp);
if(is_array($a)&&count($a)>0) $treeList=array_merge($treeList,$a);
$number++;
}
}
return $treeList;
}
/**
* 得到树型结构数组
* @param int ID,表示获得这个ID下的所有子级
* @param string 生成树型结构的基本代码,例如:"<option value=\$id \$selected>\$spacer\$name</option>"
* @param int 被选中的ID,比如在做树型下拉框的时候需要用到
* @return string
*/
public function get_tree_array($myid, $str, $sid = 0, $adds = '', $str_group = '') {
$retarray = array();
//一级栏目数组
$child = $this->get_child($myid);
if (is_array($child)) {
//数组长度
$total = count($child);
foreach ($child as $id => $value) {
@extract($value);
$retarray[$value['id']] = $value;
$retarray[$value['id']]["child"] = $this->get_tree_array($id, '');
}
}
return $retarray;
}
}
使用方法:
$list=db()->getAll('select * from v_menu order by sort DESC');
$tree = new Tree();
$tree->icon = array(' │', ' ├─ ', ' └─ ');
$tree->nbsp = ' ';
$tree->init($list);
$data = $tree->get_tree_list(0);
效果:

转载请注明:代码学堂>编程开发 > php教程 > php生成无限级树形列表json数据
随机文章
- 1php实现多个二级域名间session共享方法总结
- 2PHP header()函数使用详细说明(301、404等错误设置)
- 3HTML页面顶部出现空白部分()字符的完美解决办法
- 4PHPExcel中文帮助手册|PHPExcel使用方法(分享)_php技巧
- 5PHP 7.0新增特性详细介绍
- 6PHP使用PHPExcel实现批量上传到数据库的方法_php技巧
- 7解决laravel 5.1报错:No supported encrypter found
- 8php利用ffmpeg提取视频中音频与视频画面的方法详解
- 9PHP实现删除多重数组对象属性并重新赋值的方法
- 10PHP laravel框架中的多对多关系实例详解
- 11PHP larave框架l.env文件详细配置教程_php技巧
- 12理清PHP在Linux下执行时的文件权限设置方法_php技巧
- 13PHP框架实现自动加载类库文件原理详解_php技巧
- 14解决php-fpm.service not found问题的办法_php技巧
- 15thinkPHP+phpexcel实现excel报表导出功能介绍_php实例
排行榜