php 无限级 SelectTree 类


Posted in PHP onMay 19, 2009
/* 
author: nick 
date: 2009.05.17 
功能:生成SeletTree 
属性: 
$result 结果集 
$id_field 自身id字段 
$parent_field 父类id字段 
$option_text 选项显示名称 
$select_name 下拉菜单的名称 
$elected 默认选中 
$no_top 是否需要顶层选项 
$level 层深度 
$parent_id 同层中的id 
*/ 
class SelectTree{ 
public $result; 
public $select_name; 
public $option_text; 
public $elected; 
public $id_field; 
public $parent_field; 
public $no_top; 
public $level; 
public $parent_id; 
public $getarray; 
function __construct($result,$id_field,$parent_field,$option_text,$select_name='',$elected=0,$no_top=0,$level=0,$parent_id=0){ 
$this->result =$result; 
$this->id_field =$id_field; 
$this->parent_field =$parent_field; 
$this->option_text =$option_text; 
$this->select_name =$select_name; 
$this->elected =$elected; 
$this->no_top =$no_top; 
$this->level =$level; 
$this->parent_id =$parent_id; 
$this->getarray =self::getArray(); 
} 
/* 
功能:返回Tree二维数组 
*/ 
function getArray(){ 
$arrays=array(); 
while($row=mysql_fetch_array($this->result)){ 
$arrays[$row[$this->parent_field]][$row[$this->id_field]]=$row; 
} 
return $arrays; 
} 
/* 
功能:获取SelectTree 
*/ 
function getSelectTree(){ 
$tree = '<select name="'.$this->select_name.'">'; 
if($no_top){ 
$tree .= '<option value="0">最顶层</option>'; 
} 
self::buildTree($this->getarray,&$tree,$this->id_field,$this->option_text,$this->selected,$this->level,$this->parent_id); //生成树状结构 
$tree .= '</select>'; 
return $tree; 
} 
/* 
功能:递归构建树状结构 
*/ 
function buildTree($array,&$tree,$option_value,$option_text,$selected,$level=0,$parent_id=0){ 
if(is_array($array[$parent_id])){ 
for($i=0;$i<$level;$i++) 
$space .= ' '; //选项缩进深度 
foreach($array[$parent_id] as $key => $value){ 
if($value[$option_value] == $selected){ 
$tree .= '<option value="'.$value[$option_value].'" selected="selected">'.$space.$value[$option_text]."</option>"; 
}else{ 
$tree .= '<option value="'.$value[$option_value].'">'.$space.$value[$option_text]."</option>"; 
} 
$tree .=self::buildTree($array,&$tree,$option_value,$option_text,$selected,$level+1,$key); 
} 
}else{ 
$tree .= ''; 
} 
} 
} 
/****************************************************************************/ 
header("CONTENT-TYPE:TEXT/HTML;CHARSET=UTF-8"); 
mysql_connect("localhost","root","root"); 
mysql_select_db("tree"); 
mysql_query('set names utf8'); 
$result = mysql_query("select * from tvmenu"); 
$tree=new SelectTree($result,'id','bid','name','tree'); 
echo $tree->getSelectTree();
PHP 相关文章推荐
最令PHP初学者头痛的十四个问题
Jul 12 PHP
如何在PHP中使用Oracle数据库(4)
Oct 09 PHP
php基础知识:类与对象(1)
Dec 13 PHP
快速开发一个PHP扩展图文教程
Dec 12 PHP
php self,$this,const,static,-&amp;gt;的使用
Oct 22 PHP
解析php扩展php_curl.dll不加载的解决方法
Jun 26 PHP
对淘宝URL中ID提取的PHP代码
Sep 01 PHP
php+ajax实现图片文件上传功能实例
Jun 17 PHP
smarty内置函数section的用法
Jan 22 PHP
Yii2使用自带的UploadedFile实现的文件上传
Jun 20 PHP
php微信开发自定义菜单
Aug 27 PHP
PHP解决中文乱码
Apr 28 PHP
PHP日期时间函数的高级应用技巧
May 16 #PHP
PHP 模拟登陆MSN并获得用户信息
May 16 #PHP
抓取YAHOO股票报价的类
May 15 #PHP
PHP 采集心得技巧
May 15 #PHP
DISCUZ 论坛管理员密码忘记的解决方法
May 14 #PHP
PHP获取当前文件所在目录 getcwd()函数
May 13 #PHP
php 购物车实例(申精)
May 11 #PHP
You might like
基于mysql的bbs设计(五)
2006/10/09 PHP
Mootools 1.2教程 正则表达式
2009/09/15 Javascript
js带按钮的提示框可供选择示例代码
2013/09/17 Javascript
javascript:void(0)的作用示例介绍
2013/10/28 Javascript
jQuery 事件的命名空间简单了解
2013/11/22 Javascript
JS应用正则表达式转换大小写示例
2014/09/18 Javascript
解决jquery中动态新增的元素节点无法触发事件问题的两种方法
2015/10/30 Javascript
JavaScript中函数表达式和函数声明及函数声明与函数表达式的不同
2015/11/15 Javascript
GitHub上一些实用的JavaScript的文件压缩解压缩库推荐
2016/03/13 Javascript
基于javascript实现的购物商城商品倒计时实例
2016/12/11 Javascript
详解用原生JavaScript实现jQuery的某些简单功能
2016/12/19 Javascript
从零学习node.js之文件操作(三)
2017/02/21 Javascript
AngularJS使用ng-class动态增减class样式的方法示例
2017/05/18 Javascript
js/jQuery实现全选效果
2019/06/17 jQuery
js定义类的方法示例【ES5与ES6】
2019/07/30 Javascript
微信小程序实现弹框效果
2020/05/26 Javascript
Vue循环中多个input绑定指定v-model实例
2020/08/31 Javascript
python切换hosts文件代码示例
2013/12/31 Python
Django框架中render_to_response()函数的使用方法
2015/07/16 Python
基于python的字节编译详解
2017/09/20 Python
Python探索之pLSA实现代码
2017/10/25 Python
NumPy 数组使用大全
2019/04/25 Python
django 自定义filter 判断if var in list的例子
2019/08/20 Python
flask框架渲染Jinja模板与传入模板变量操作详解
2020/01/25 Python
Agoda西班牙:全球特价酒店预订
2017/06/03 全球购物
阿联酋电子产品购物网站:Menakart
2017/09/15 全球购物
英国健身仓库:Bodybuilding Warehouse
2019/03/06 全球购物
超市实习总结自我鉴定
2013/09/19 职场文书
企业文化理念标语
2014/06/10 职场文书
村主任个人对照检查材料
2014/10/01 职场文书
六查六看个人剖析材料
2014/10/14 职场文书
2014年销售内勤工作总结
2014/12/01 职场文书
为什么node.js不适合大型项目
2021/04/28 Javascript
MySQL系列之一 MariaDB-server安装
2021/07/02 MySQL
python实现层次聚类的方法
2021/11/01 Python
MySQL如何修改字段类型和字段长度
2022/06/10 MySQL