总结
豆包 AI 助手文章总结

php中tree类的使用方法

小云云
发布: 2018-03-19 15:07:06
原创
2485人浏览过

本文主要和大家分享php中tree类的使用方法,希望能帮助到大家。

<?php include &#39;tree.class.php&#39;;
//模拟数据库
$data=array(
    array(&#39;id&#39;=>1,'pid'=&gt;0,'name'=&gt;'一级栏目一'),
    array('id'=&gt;2,'pid'=&gt;0,'name'=&gt;'一级栏目二'),
    array('id'=&gt;3,'pid'=&gt;1,'name'=&gt;'二级栏目一'),
    array('id'=&gt;4,'pid'=&gt;3,'name'=&gt;'三级栏目一'),
    array('id'=&gt;5,'pid'=&gt;4,'name'=&gt;'四级栏目一'),
);
//转换数据
$tree_data=array();
foreach ($data as $key=&gt;$value){
    $tree_data[$value['id']]=array(
        'id'=&gt;$value['id'],
        'parentid'=&gt;$value['pid'],
        'name'=&gt;$value['name']
    );
}
/**
 * 输出树形结构
 */
$str="<tr>
    <td><input></td>
    <td>\$id</td>
    <td>\$spacer\$name</td>
    <td><a>添加</a></td>
    <td><a>删除</a></td>
    <td><a>修改</a></td>
    </tr>";
$tree=new Tree();
$tree-&gt;init($tree_data);
echo "
登录后复制
"; echo $tree->get_tree(0, $str); echo "
"; echo "
"; echo "
"; echo "
"; echo "
"; /**  * 输出下拉列表  */ $str=""; $tree=new Tree(); $tree->init($tree_data); echo "";

tree.class.php

<?php /**
* 通用的树型类,可以生成任何树型结构
*/
class tree {
	/**
	* 生成树型结构所需要的2维数组
	* @var array
	*/
	public $arr = array();

	/**
	* 生成树型结构所需修饰符号,可以换成图片
	* @var array
	*/
	public $icon = array(&#39;│&#39;,&#39;├&#39;,&#39;└&#39;);
	public $nbsp = " ";

	/**
	* @access private
	*/
	public $ret = &#39;&#39;;

	/**
	* 构造函数,初始化类
	* @param array 2维数组,例如:
	* array(
	*      1 => array('id'=&gt;'1','parentid'=&gt;0,'name'=&gt;'一级栏目一'),
	*      2 =&gt; array('id'=&gt;'2','parentid'=&gt;0,'name'=&gt;'一级栏目二'),
	*      3 =&gt; array('id'=&gt;'3','parentid'=&gt;1,'name'=&gt;'二级栏目一'),
	*      4 =&gt; array('id'=&gt;'4','parentid'=&gt;1,'name'=&gt;'二级栏目二'),
	*      5 =&gt; array('id'=&gt;'5','parentid'=&gt;2,'name'=&gt;'二级栏目三'),
	*      6 =&gt; array('id'=&gt;'6','parentid'=&gt;3,'name'=&gt;'三级栏目一'),
	*      7 =&gt; array('id'=&gt;'7','parentid'=&gt;3,'name'=&gt;'三级栏目二')
	*      )
	*/
	public function init($arr=array()){
       $this-&gt;arr = $arr;
	   $this-&gt;ret = '';
	   return is_array($arr);
	}

    /**
	* 得到父级数组
	* @param int
	* @return array
	*/
	public function get_parent($myid){
		$newarr = array();
		if(!isset($this-&gt;arr[$myid])) return false;
		$pid = $this-&gt;arr[$myid]['parentid'];
		$pid = $this-&gt;arr[$pid]['parentid'];
		if(is_array($this-&gt;arr)){
			foreach($this-&gt;arr as $id =&gt; $a){
				if($a['parentid'] == $pid) $newarr[$id] = $a;
			}
		}
		return $newarr;
	}

    /**
	* 得到子级数组
	* @param int
	* @return array
	*/
	public function get_child($myid){
		$a = $newarr = array();
		if(is_array($this-&gt;arr)){
			foreach($this-&gt;arr as $id =&gt; $a){
				if($a['parentid'] == $myid) $newarr[$id] = $a;
			}
		}
		return $newarr ? $newarr : false;
	}

    /**
	* 得到当前位置数组
	* @param int
	* @return array
	*/
	public function get_pos($myid,&amp;$newarr){
		$a = array();
		if(!isset($this-&gt;arr[$myid])) return false;
        $newarr[] = $this-&gt;arr[$myid];
		$pid = $this-&gt;arr[$myid]['parentid'];
		if(isset($this-&gt;arr[$pid])){
		    $this-&gt;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>\$spacer\$name</option>"
	* @param int 被选中的ID,比如在做树型下拉框的时候需要用到
	* @return string
	*/
	public function get_tree($myid, $str, $sid = 0, $adds = '', $str_group = ''){
		$number=1;
		$child = $this-&gt;get_child($myid);
		if(is_array($child)){
		    $total = count($child);
			foreach($child as $id=&gt;$value){
				$j=$k='';
				if($number==$total){
					$j .= $this-&gt;icon[2];
				}else{
					$j .= $this-&gt;icon[1];
					$k = $adds ? $this-&gt;icon[0] : '';
				}
				$spacer = $adds ? $adds.$j : '';
				$selected = $id==$sid ? 'selected' : '';
				@extract($value);
				$parentid == 0 &amp;&amp; $str_group ? eval("\$nstr = \"$str_group\";") : eval("\$nstr = \"$str\";");
				$this-&gt;ret .= $nstr;
				$nbsp = $this-&gt;nbsp;
				$this-&gt;get_tree($id, $str, $sid, $adds.$k.$nbsp,$str_group);
				$number++;
			}
		}
		return $this-&gt;ret;
	}
    /**
	* 同上一方法类似,但允许多选
	*/
	public function get_tree_multi($myid, $str, $sid = 0, $adds = ''){
		$number=1;
		$child = $this-&gt;get_child($myid);
		if(is_array($child)){
		    $total = count($child);
			foreach($child as $id=&gt;$a){
				$j=$k='';
				if($number==$total){
					$j .= $this-&gt;icon[2];
				}else{
					$j .= $this-&gt;icon[1];
					$k = $adds ? $this-&gt;icon[0] : '';
				}
				$spacer = $adds ? $adds.$j : '';
				
				$selected = $this-&gt;have($sid,$id) ? 'selected' : '';
				@extract($a);
				eval("\$nstr = \"$str\";");
				$this-&gt;ret .= $nstr;
				$this-&gt;get_tree_multi($id, $str, $sid, $adds.$k.' ');
				$number++;
			}
		}
		return $this-&gt;ret;
	}
	 /**
	* @param integer $myid 要查询的ID
	* @param string $str   第一种HTML代码方式
	* @param string $str2  第二种HTML代码方式
	* @param integer $sid  默认选中
	* @param integer $adds 前缀
	*/
	public function get_tree_category($myid, $str, $str2, $sid = 0, $adds = ''){
		$number=1;
		$child = $this-&gt;get_child($myid);
		if(is_array($child)){
		    $total = count($child);
			foreach($child as $id=&gt;$a){
				$j=$k='';
				if($number==$total){
					$j .= $this-&gt;icon[2];
				}else{
					$j .= $this-&gt;icon[1];
					$k = $adds ? $this-&gt;icon[0] : '';
				}
				$spacer = $adds ? $adds.$j : '';
				
				$selected = $this-&gt;have($sid,$id) ? 'selected' : '';
				@extract($a);
				if (empty($html_disabled)) {
					eval("\$nstr = \"$str\";");
				} else {
					eval("\$nstr = \"$str2\";");
				}
				$this-&gt;ret .= $nstr;
				$this-&gt;get_tree_category($id, $str, $str2, $sid, $adds.$k.' ');
				$number++;
			}
		}
		return $this-&gt;ret;
	}
	
	/**
	 * 同上一类方法,jquery treeview 风格,可伸缩样式(需要treeview插件支持)
	 * @param $myid 表示获得这个ID下的所有子级
	 * @param $effected_id 需要生成treeview目录数的id
	 * @param $str 末级样式
	 * @param $str2 目录级别样式
	 * @param $showlevel 直接显示层级数,其余为异步显示,0为全部限制
	 * @param $style 目录样式 默认 filetree 可增加其他样式如'filetree treeview-famfamfam'
	 * @param $currentlevel 计算当前层级,递归使用 适用改函数时不需要用该参数
	 * @param $recursion 递归使用 外部调用时为FALSE
	 */
    function get_treeview($myid,$effected_id='example',$str="<span>\$name</span>", $str2="<span>\$name</span>" ,$showlevel = 0 ,$style='filetree ' , $currentlevel = 1,$recursion=FALSE) {
        $child = $this-&gt;get_child($myid);
        if(!defined('EFFECTED_INIT')){
           $effected = ' id="'.$effected_id.'"';
           define('EFFECTED_INIT', 1);
        } else {
           $effected = '';
        }
		$placeholder = 	'
登录后复制
';         if(!$recursion) $this->str .='
    ';         foreach($child as $id=>$a) {          @extract($a); if($showlevel > 0 && $showlevel == $currentlevel && $this->get_child($id)) $folder = 'hasChildren'; //如设置显示层级模式@2011.07.01          $floder_status = isset($folder) ? ' class="'.$folder.'"' : '';             $this->str .= $recursion ? '
    • ' : '
    • ';             $recursion = FALSE;             if($this->get_child($id)){              eval("\$nstr = \"$str2\";");              $this->str .= $nstr;                 if($showlevel == 0 || ($showlevel > 0 && $showlevel > $currentlevel)) { $this->get_treeview($id, $effected_id, $str, $str2, $showlevel, $style, $currentlevel+1, TRUE); } elseif($showlevel > 0 && $showlevel == $currentlevel) { $this->str .= $placeholder; }             } else {                 eval("\$nstr = \"$str\";");                 $this->str .= $nstr;             }             $this->str .=$recursion ? '
    ': '';         }         if(!$recursion)  $this->str .='
';         return $this->str;     } /**  * 获取子栏目json  * Enter description here ...  * @param unknown_type $myid  */ public function creat_sub_json($myid, $str='') { $sub_cats = $this->get_child($myid); $n = 0; if(is_array($sub_cats)) foreach($sub_cats as $c) { $data[$n]['id'] = iconv(CHARSET,'utf-8',$c['catid']); if($this->get_child($c['catid'])) { $data[$n]['liclass'] = 'hasChildren'; $data[$n]['children'] = array(array('text'=>' ','classes'=>'placeholder')); $data[$n]['classes'] = 'folder'; $data[$n]['text'] = iconv(CHARSET,'utf-8',$c['catname']); } else { if($str) { @extract(array_iconv($c,CHARSET,'utf-8')); eval("\$data[$n]['text'] = \"$str\";"); } else { $data[$n]['text'] = iconv(CHARSET,'utf-8',$c['catname']); } } $n++; } return json_encode($data); } private function have($list,$item){ return(strpos(',,'.$list.',',','.$item.',')); } } ?>

相关推荐:

php写的无限级selectTree类

以上就是php中tree类的使用方法的详细内容,更多请关注php中文网其它相关文章!

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
豆包 AI 助手文章总结
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号