PHP数组转树状结构的两种方法(递归/引用)

递归

/**
     * 数组转树状结构
     * @param  arr       $list      要转换的数据
     * @param  int       $pid       父级ID
     * @param  str       $pid_field 父级字段名
     * @param  str       $id_field  主键名
     */
    function getTree($list, $pid=0, $pid_field='pid', $id_field='id'){
        $result=[];
        foreach ($list as $k => $v) {
            if($list[$k][$pid_field] == $pid){
                unset($list[$k]);
                $children = getTree($list,$v[$id_field]);
                if($children){
                    $v['children'] = $children;
                }
                $result[]=$v;
            }
        }
        return $result;
    }

引用

/**
     * 数组转树状结构
     * @param  arr       $list      要转换的数据
     * @param  str       $pid_field 父级字段名
     * @param  str       $id_field  主键名
     */
    function getTree($list, $pid_field='pid', $id_field='id'){
        $items=[];
        foreach ($list as $k => $v) {
            $items[$v[$id_field]]=$v;
        }
        $tree=[];
        foreach ($items as $k => $v) {
            if(isset($items[$v[$pid_field]])){
                $items[$v[$pid_field]]['children'][]=&$items[$k];
            }else{
                $tree[]=&$items[$k];
            }
        }
        return $tree;
    }

你可能感兴趣的:(php无限极分类)