php tree美化,发一个自己写的PHP树类 tree for php,该如何解决

PHP code<?php

/*

PHP实现数据结构 树类

需要数据库之持 暂不支持文件和内存保存数据

版本:1.0

时间:2010年4月1日

作者:未知树工作室 www.untree.net 刘定发

数据库表结构

CREATE TABLE `tree` (

`c_id` bigint(20) unsigned NOT NULL auto_increment,

`c_name` varchar(255) NOT NULL default '''none''',

`c_fid` bigint(20) unsigned default '0',

`c_data` varchar(255) default NULL,

PRIMARY KEY (`c_id`)

)

表名称可以在类构造函数中指定

函数索引:

1、构造函数

$mode 默认为db 其他模式不支持 $name 树名称 $tb_file_name:表名称 ,文件模式使用文件名(暂时无用)

$db_data为数据库参数

$db_set=array(

'db_host'=>'localhost',

'db_user'=>'root',

'db_pass'=>'123456',

'db_name'=>'sy_speedphp'

);

function __construct($mode='db',$name,$tb_file_name='tree',$db_data=NULL)

2、添加结点

//插入成功返回插入ID

$data为数据域

function addnode($fid=0,$data)

3、修改一个结点的信息 只能修改FID和DATA域

//如果不指定 。默认不修改

function mdfnode($node_id,$fid=false,$data=false)

4、删除结点及其子节点 id为结点ID mode为删除模式 ture为直接删除 false为将指定结点和子节点移动到一个新树中 并返回随机的新树的名称

function deletenode($id,$mode=true)

5、获取子节点函数 不包括指定的根节点 递归调用函数

function getsub($fid,$deep=8888,$storage_mode=true,$recall=NULL)

$fid为根结点ID

$deep:遍历深度 从1开始 1即是子节点 2是孙结点

$storage_mode=true时 使用多维数组返回父子关系

$storage_mode=false时 使用一维数组返回 不记录父子关系

$recall 回调函数 如果不为空 在遍历过程中 每个数据都将调用该函数 回调函数定义如下

function function_name($node_data,$deep); $node_data为结点数据 deep为深度,从1开始 表示该结点到所指定根结点(fid)的距离

回调函数参数传递时如下所示

function myfunction($node_data,$deep){code};//自定义函数

$tree1->getsub(0,8888,true,"myfunction")//使用函数名作为参数

当保存为多维数组的时候结构如下

array

(

fid1=>array(),

fid2=>array

(

fid21=>array(id,name,fid,data),

fid22=>array(id,name,fid,data),

)

$fid3=>data;

)

其中fid1,fid2……为根节点的ID 其对应值为子节点信息

//注意:只有叶子节点才能返回具体数据

//$deep为深度 默认为-1,表示返回所有 例如deep=1时,返回第一层子节点

6、获取结点信息 返回结点信息 并为数组添加键值为 sub_count=>子节点数量

function getnode(4);

7、//获取根向上类别信息

function getfarlist($node_id,$fadeep)

//@param:$fadeep 向上的等级 返回数据从最靠近的排在前面 fadeep从1开始 返回一个二维数组

8、提交查询 如果为insert update delete 只返回true or false 如果为SELEC 返回二维数组

function db_query($sql)

9、错误信息函数 可以自定义修改 目前只是显示错误信息

function erro($msg);

*/

//设置调试模式开关 true 为打开 输出SQL语句

define('DEBUG_MODE',false);

class cls_tree

{

//数据存储的模式 'file'|'db'|'mem'分别为文件和数据库

//如果存为文件 需要指定文件位置

//如果存为数据库 需要创建表 并指定数据库链接相关配置信息

private $mode;

private $db_host;//主机

private $db_port;//端口 默认为3306

private $db_user;//用户名

private $db_pass;//密码

private $db_name;//数据库名;

private $tb_name;//树结构表名字

private $file_name;//数据文件位置

private $link_id;//数据库链接ID

//private $link_tb;//和树节点相关联的表名称 用于修改的时候关联修改

private $tree_name;//树的名称 每个树必须有一个自己的名称 一个数据库表中必然存在多个树

public $debug;//设置为true 的时候为调试状态

//构造函数

//链接数据库 使用数据库表作为数据中心

/*用数据库或者数据文件名 来构造

array{

$db_host=NULL,

$db_user

,$db_pass

,$db_name,

$filename

}

*/

public function __construct($mode='db',$name,$tb_file_name='tree',$db_data=NULL)

{

if($mode=='db')//数据库

{

$this->link_id=mysql_connect( $db_data['db_host'] , $db_data['db_user'] , $db_data['db_pass']);

if(!$this->link_id)

{

echo 'Can not connect MySQL Server';

return false;

}

if ( ! mysql_select_db($db_data['db_name'],$this->link_id) )

{

echo 'Can not use MySQL Database';

return false;

}

//设置调试模式 输出SQL语句

$this->debug=DEBUG_MODE;

$this->tb_name=$tb_file_name;

$this->tree_name=$name;

mysql_query("set names 'gb2312';",$this->link_id);

}//如果使用数据库存储数据

else if($mode=='file')

{

$this->file_name=$tb_file_name;

}

else if($mode=='mem') //其他方式 内存

{

}

else

{

die('erro to construct object without storage mode');

}

}//__construct

//添加一个结点

//如果父节点ID为0 插入为根节点

//插入成功返回插入ID

function addnode($fid=0,$data)

{

$data=mysql_escape_string($data);//MSYQL过滤

if($fid)//如果父节点ID不为0

{

//如果父节点ID不为零 需要检查是否存在父节点

$sql='select count(*) as sum from '.$this->tb_name. ' where c_id='.$fid.' and c_name=\''.$this->tree_name.'\';';

$re=$this->db_query($sql);

if($re[0]['sum']!=1)

{

$this->erro('not exist parent node ,parent id:'.$fid.'
');

return ;

}

//执行插入结点

$sql='insert into '.$this->tb_name.' values(NULL,'."'{$this->tree_name}','{$fid}','$data');";

if($this->db_query($sql))

{

return mysql_insert_id($this->link_id);

}

else

{

return false;

}

}

//插入为根节点 需要查询树名称是否已经被使用 一个树只有一个根节点 执行插入结点

else

{

$sql='select count(*) as sum from '.$this->tb_name. ' where c_name=\''.$this->tree_name.'\';';

$re=$this->db_query($sql);

if($re[0]['sum']!=0)

{

$this->erro('can not create tree,even existed tree name:'.$this->tree_name.'
');

return ;

}

else

{

$sql='insert into '.$this->tb_name.' values(NULL,'."'{$this->tree_name}','{$fid}','$data');";

if($this->db_query($sql))

{

return mysql_insert_id($this->link_id);

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值