php 将一个二维数组转换成有父子关系的数组
添加时间:2013-8-1 点击量:
<?php
/
Tree 树型类(无穷分类)
@author Kvoid
@copyright http://kvoid.com
@version 1.0
@access public
@example
¥tree= new Tree(¥result);
¥arr=¥tree->leaf(0);
¥nav=¥tree->navi(15);
/
class Tree {
private ¥result;
private ¥tmp;
private ¥arr;
private ¥already = array();
/
机关函数
@param array ¥result 树型数据表成果集
@param array ¥fields 树型数据表字段,array(分类id,父id)
@param integer ¥root 分类的父id
/
public function __construct(¥result, ¥fields = array(id, pid), ¥root = 0) {
¥this->result = ¥result;
¥this->fields = ¥fields;
¥this->root = ¥root;
¥this->handler();
}
/
树型数据表成果集处理惩罚
/
private function handler() {
foreach (¥this->result as ¥node) {
¥tmp[¥node[¥this->fields[1]]][] = ¥node;
}
krsort(¥tmp);
for (¥i = count(¥tmp); ¥i > 0; ¥i--) {
foreach (¥tmp as ¥k => ¥v) {
if (!in_array(¥k, ¥this->already)) {
if (!¥this->tmp) {
¥this->tmp = array(¥k, ¥v);
¥this->already[] = ¥k;
continue;
} else {
foreach (¥v as ¥key => ¥value) {
if (¥value[¥this->fields[0]] == ¥this->tmp[0]) {
¥tmp[¥k][¥key][child] = ¥this->tmp[1];
¥this->tmp = array(¥k, ¥tmp[¥k]);
}
}
}
}
}
¥this->tmp = null;
}
¥this->tmp = ¥tmp;
}
/
反向递归
/
private function recur_n(¥arr, ¥id) {
foreach (¥arr as ¥v) {
if (¥v[¥this->fields[0]] == ¥id) {
¥this->arr[] = ¥v;
if (¥v[¥this->fields[1]] != ¥this->root) ¥this->recur_n(¥arr, ¥v[¥this->fields[1]]);
}
}
}
/
正向递归
/
private function recur_p(¥arr) {
foreach (¥arr as ¥v) {
¥this->arr[] = ¥v[¥this->fields[0]];
if (¥v[child]) ¥this->recur_p(¥v[child]);
}
}
/
菜单 数组
@param integer ¥id 分类id
@return array 返回分支,默认返回全部树
/
public function leaf(¥id = null) {
¥id = (¥id == null) ? ¥this->root : ¥id;
return ¥this->tmp[¥id];
}
/
导航 一维数组
@param integer ¥id 分类id
@return array 返回单线分类直到分类
/
public function navi(¥id) {
¥this->arr = null;
¥this->recur_n(¥this->result, ¥id);
krsort(¥this->arr);
return ¥this->arr;
}
/
散落 一维数组
@param integer ¥id 分类id
@return array 返回leaf下所有分类id
/
public function leafid(¥id) {
¥this->arr = null;
¥this->arr[] = ¥id;
¥this->recur_p(¥this->leaf(¥id));
return ¥this->arr;
}
}
?>
真正的心灵世界会告诉你根本看不见的东西,这东西需要你付出思想和灵魂的劳动去获取,然后它会照亮你的生命,永远照亮你的生命。——王安忆《小说家的十三堂课》
<?php
/
Tree 树型类(无穷分类)
@author Kvoid
@copyright http://kvoid.com
@version 1.0
@access public
@example
¥tree= new Tree(¥result);
¥arr=¥tree->leaf(0);
¥nav=¥tree->navi(15);
/
class Tree {
private ¥result;
private ¥tmp;
private ¥arr;
private ¥already = array();
/
机关函数
@param array ¥result 树型数据表成果集
@param array ¥fields 树型数据表字段,array(分类id,父id)
@param integer ¥root 分类的父id
/
public function __construct(¥result, ¥fields = array(id, pid), ¥root = 0) {
¥this->result = ¥result;
¥this->fields = ¥fields;
¥this->root = ¥root;
¥this->handler();
}
/
树型数据表成果集处理惩罚
/
private function handler() {
foreach (¥this->result as ¥node) {
¥tmp[¥node[¥this->fields[1]]][] = ¥node;
}
krsort(¥tmp);
for (¥i = count(¥tmp); ¥i > 0; ¥i--) {
foreach (¥tmp as ¥k => ¥v) {
if (!in_array(¥k, ¥this->already)) {
if (!¥this->tmp) {
¥this->tmp = array(¥k, ¥v);
¥this->already[] = ¥k;
continue;
} else {
foreach (¥v as ¥key => ¥value) {
if (¥value[¥this->fields[0]] == ¥this->tmp[0]) {
¥tmp[¥k][¥key][child] = ¥this->tmp[1];
¥this->tmp = array(¥k, ¥tmp[¥k]);
}
}
}
}
}
¥this->tmp = null;
}
¥this->tmp = ¥tmp;
}
/
反向递归
/
private function recur_n(¥arr, ¥id) {
foreach (¥arr as ¥v) {
if (¥v[¥this->fields[0]] == ¥id) {
¥this->arr[] = ¥v;
if (¥v[¥this->fields[1]] != ¥this->root) ¥this->recur_n(¥arr, ¥v[¥this->fields[1]]);
}
}
}
/
正向递归
/
private function recur_p(¥arr) {
foreach (¥arr as ¥v) {
¥this->arr[] = ¥v[¥this->fields[0]];
if (¥v[child]) ¥this->recur_p(¥v[child]);
}
}
/
菜单 数组
@param integer ¥id 分类id
@return array 返回分支,默认返回全部树
/
public function leaf(¥id = null) {
¥id = (¥id == null) ? ¥this->root : ¥id;
return ¥this->tmp[¥id];
}
/
导航 一维数组
@param integer ¥id 分类id
@return array 返回单线分类直到分类
/
public function navi(¥id) {
¥this->arr = null;
¥this->recur_n(¥this->result, ¥id);
krsort(¥this->arr);
return ¥this->arr;
}
/
散落 一维数组
@param integer ¥id 分类id
@return array 返回leaf下所有分类id
/
public function leafid(¥id) {
¥this->arr = null;
¥this->arr[] = ¥id;
¥this->recur_p(¥this->leaf(¥id));
return ¥this->arr;
}
}
?>
真正的心灵世界会告诉你根本看不见的东西,这东西需要你付出思想和灵魂的劳动去获取,然后它会照亮你的生命,永远照亮你的生命。——王安忆《小说家的十三堂课》