PHP实现无限极分类的两种方式,递归和引用

    这里我就放一个很久之前研究的多级菜单处理方法,这个方法支持无限极分类,有多少级就会返回多少级数组深度。

上代码:

1、递归

//组成树状结构数组:递归
function list_to_tree($data, $pid){
    $tree = '';
    if (!empty($data)) {
        foreach ($data as $k => $v) {
            unset($v['region_type']);
            if($v['parent_id'] == $pid){
                unset($data[$k]);
                $v['next'] = getTree($data,$v['region_id']);
                if (empty($v['next'])) {
                    unset($v['next']);
                }
                $tree[] = $v;
            }
        }
        return $tree;
    }
}
print_r(getTree($data,0));

这个方法在输出多级数据的时候,很有用,只要找到对应的父id和对应的子id,就会输出你想要的结果,但是呢,众所周知,递归是很吃内存的,能不用就不用,后来,发现了另外一个方法,PHP的引用特性,上代码:

2、引用

// 组成树状结构数组:引用
function list_to_tree($array) {
    //第一步 构造数据
    $items = array();
    foreach ($array as $value) {
        $items[$value['region_id']] = $value;
    }
    //第二部 遍历数据 生成树状结构
    $tree = array();
    foreach ($items as $key => $value) {
        if (isset($items[$value['parent_id']])) {
            $items[$value['parent_id']]['son'][] = &$items[$key];
        } else {
            $tree[] = &$items[$key];
        }
    }
    return $tree;
}

这个的效率就高多了,我处理过一个2M大小的数据,用递归耗时67s,用引用耗时才1.5s,高下立判!



技苑
请先登录后发表评论
  • 最新评论
  • 总共0条评论
  • © 2016-2024 技苑 | PHP是最好的语言 版权所有 ICP证:鄂ICP备15021999号-4
  • 联系邮箱:master@pengxb.com