php生成无限级树形列表json数据
通用树形类:
/**
* 通用的树型类,可以生成任何树型结构
*/
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数据
1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!10210454@qq.com
2. 本站不保证所提供所有下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理,有奖励!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
4. 如果您也有好的资源或教程,您可以投稿发布,成功分享后有RB奖励和额外RMB收入!
磊宇堂正在使用的服务器 维护管理由磊宇云服务器提供支持
磊宇堂 » php生成无限级树形列表json数据
2. 本站不保证所提供所有下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理,有奖励!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
4. 如果您也有好的资源或教程,您可以投稿发布,成功分享后有RB奖励和额外RMB收入!
磊宇堂正在使用的服务器 维护管理由磊宇云服务器提供支持
磊宇堂 » php生成无限级树形列表json数据