关于php: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;
    }

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理