php 合并数组成父子关系,php 将一个二维数组转换成有父子关系的数组

@author Kvoid

@copyright http://kvoid.com

@version 1.0

@access public

@example

¥tree= new Tree(¥result);

¥arr=¥tree->leaf(0);

¥nav=¥tree->navi(15);/

classTree {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 functionhandler() {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;

}

}?>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值