<?php
class CCategoryStruct {
var $id;
var $pid;
var $order;
var $depth;
var $obj;
}
class CCategory {
var $data;
var $tdata;
var $maxOrder;
function CCategory () {
$this->data = array();
$this->tdata = array();
$this->maxOrder = 0;
}
# **************************************************
# 数据赋值
# **************************************************
function assign ($arr, $f_id, $f_pid, $f_order) {
if (is_array($arr)) {
foreach ($arr as $v) {
$this->assignOneSortOrder($v[$f_id], $v[$f_pid], $v[$f_order], $v);
}
} else {
$this->assignOneSortOrder($arr, $f_id, $f_pid, $f_order);
}
}
# **************************************************
# 单条记录赋值
# **************************************************
function assignOne ($id, $pid, $order, $obj) {
$data = new CCategoryStruct;
$data->id = $id;
$data->pid = $pid;
$data->order = $order;
$data->obj = $obj;
$this->data[] = $data;
}
# **************************************************
# 单条记录排序赋值
# **************************************************
function assignOneSortOrder ($id, $pid, $order, $obj) {
$data = new CCategoryStruct;
$data->id = $id;
$data->pid = $pid;
$data->order = $order;
$data->obj = $obj;
if ($order <= $this->maxOrder) {
$orderData = array();
$arr = &$this->data;
$n = count($arr);
$i = 0;
while ($i < $n) {
if ($order <= $arr[$i]->order) {
break;
} else {
$orderData[] = $arr[$i];
}
$i++;
}
$orderData[] = $data;
while ($i < $n) {
$orderData[] = $arr[$i];
$i++;
}
$this->data = $orderData;
} else {
$this->maxOrder = $order;
$this->data[] = $data;
}
}
# **************************************************
# 数据排序
# **************************************************
function dataSortOrder ($flag = '+') {
$arr = &$this->data;
for ($i = 0; $i < count($arr); $i++) {
for ($j = $i + 1; $j < count($arr); $j++) {
if ( (($arr[$j]->order < $arr[$i]->order) && ($flag == '+')) ||
(($arr[$j]->order > $arr[$i]->order) && ($flag == '-')) ) {
$obj = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $obj;
}
}
}
}
# **************************************************
# 获得节点信息
# **************************************************
function getNode ($id) {
$arr = $this->data;
foreach ($arr as $v) {
if ($v->id == $id) return $v;
}
}
# **************************************************
# 获得子节点信息
# **************************************************
function getChild ($id) {
$arr = $this->data;
$data = array();
foreach ($arr as $v) {
if ($v->pid == $id) $data[] = $v;
}
return $data;
}
# **************************************************
# 获得父节点信息
# **************************************************
function getParent ($id) {
$arr = $this->data;
foreach ($arr as $v) {
if ($v->id == $id) return $this->getNode($v->pid);
}
}
# **************************************************
# 获得全部子节点信息
# **************************************************
function getChildren ($id = 0) {
$n = count($this->tdata);
if ($n > 0) {
$data = array();
$arr = &$this->tdata;
$i = 0;
while ($i < $n) {
if ($arr[$i]->pid == $id) break;
$i++;
}
if ($i == $n) return $data;
$depth = $arr[$i]->depth;
while ($i < $n) {
if ($arr[$i]->depth >= $depth) {
$data[] = $arr[$i];
} else {
break;
}
$i++;
}
return $data;
} else {
$this->tdata = $this->getTreeList($id);
return $this->tdata;
}
}
# **************************************************
# 获得全部子节点信息
# **************************************************
function getTreeList ($id = 0, $depth = 0, &$tData = array()) {
$arr = $this->data;
foreach ($arr as $v) {
if ($v->pid == $id) {
$v->depth = $depth;
$tData[] = $v;
$this->getTreeList($v->id, $depth + 1, $tData);
}
}
return $tData;
}
# **************************************************
# 获得全部父节点信息
# **************************************************
function getParents ($id) {
$data = array();
while ($v = $this->getParent($id)) {
$data[] = $v;
$id = $v->id;
}
return array_reverse($data);
}
# **************************************************
# 比较两个节点的关系
# **************************************************
function compare ($id1, $id2) {
$data = $this->getChildren($id1);
foreach ($data as $v) {
if ($v->id == $id2) return 'p';
}
$data = $this->getParents($id1);
foreach ($data as $v) {
if ($v->id == $id2) return 'c';
}
$v1 = $this->getNode($id1);
$v2 = $this->getNode($id2);
if ($v1->pid == $v2->pid) return 's';
return 'o';
}
}
?>
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
php与mysql实现无线分类.rar (2个子文件)
php与mysql实现无线分类
CCategory.inc.php 6KB
post.php 3KB
共 2 条
- 1
资源评论
- langhua812013-11-28还不错。对我帮助很大
wengbin22
- 粉丝: 3
- 资源: 25
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功