php 无限分类的问题 我想使用引用方法 格式化数组 显示层级数 并排序,哪位大侠帮帮忙,贡献一下代码,网上找了好久 没找到,谢谢!!

52举子 发布于 08/06 15:16
阅读 70
收藏 0

【Gopher China万字分享】华为云的Go语言云原生实战经验!>>>

//下边是 使用引用方法 得到树状数组

/**
 * 无限极分类实现
 * @param  $list array 需要处理的数组
 * @param  $pk string 主id
 * @param  $pid string 父级id
 * @param  $child string 子级名称
 * @param  $root 顶级分类的值
 * @return Array
 */
function buildTree($list, $pk = 'id', $pid = 'pid', $child = '_child', $root = 0) {

    $tree = array();
    if (!empty($list)) {
        $packData = array();
        foreach ($list as $data) {
            $packData[$data[$pk]] = $data;
        }

        foreach ($packData as $key => $val) {
            if ($val[$pid] == $root) {
                $tree[] = &$packData[$key];
            } else {
                $packData[$val[$pid]][$child][] = &$packData[$key];
            }
        }

    }
    return $tree;
}


$array = array(
    array('id' => 6, 'pid' => 2, 'name' => '徐汇区','ord' => 1),
    array('id' => 7, 'pid' => 6, 'name' => '徐家汇','ord' => 2),
    array('id' => 8, 'pid' => 2, 'name' => '黄浦区','ord' => 2),
    array('id' => 9, 'pid' => 2, 'name' => '普陀区','ord' => 0),
    array('id' => 10, 'pid' => 9, 'name' => '曹杨路','ord' => 9),
    array('id' => 1, 'pid' => 0, 'name' => '北京市','ord' => 8),
    array('id' => 2, 'pid' => 0, 'name' => '上海市','ord' => 7),
    array('id' => 3, 'pid' => 1, 'name' => '东城区','ord' => 22),
    array('id' => 4, 'pid' => 1, 'name' => '朝阳区','ord' => 19),
    array('id' => 5, 'pid' => 1, 'name' => '海淀区','ord' => 20),
);

加载中
0
自由PHP
自由PHP

先排序,然后生成层次树

function getListTree($items, $pk='type_id',$pid = 'type_pid',$child = 'childs') {
        $tree = array();
        foreach ($items as $item){
            if (isset($items[$item[$pid]])){
                $items[$item[$pid]][$child][$item[$pk]] = &$items[$item[$pk]];
            } else {
                $tree[$item[$pk]] = &$items[$item[$pk]];
            }
        }
        return $tree;
    }

 

返回顶部
顶部