} } }

    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;
    }
    }
    ?>


    真正的心灵世界会告诉你根本看不见的东西,这东西需要你付出思想和灵魂的劳动去获取,然后它会照亮你的生命,永远照亮你的生命。——王安忆《小说家的十三堂课》
    分享到: