PHPTree——快速生成无限多级分类

本文介绍了一个使用PHP实现的无限多级分类树形结构生成器。该生成器支持多种输出格式,包括常规的多维数组形式及便于HTML输出的线性结构。作者提供了详细的代码实现,并解释了各个配置项的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

$data = array(
	array(
		'id' => 1,
		'text' => '用户管理',
		'parent_id' => 0
	),
	array(
		'id' => 2,
		'text' => '用户列表',
		'parent_id' => 1
	),
	array(
		'id' => 3,
		'text' => '权限管理',
		'parent_id' => 1
	),
	array(
		'id' => 4,
		'text' => '文章管理',
		'parent_id' => 0
	),
	array(
		'id' => 5,
		'text' => '新闻',
		'parent_id' => 4
	),
	array(
		'id' => 6,
		'text' => '国内新闻',
		'parent_id' => 5
	)
);

$r = PHPTree::makeTree($data,array(
	'expanded' => true
));



<?php

namespace app\commonconf\common;

use app\common\common\commonfunc;
use app\commonconf\common\RequestClass;
use think\Session;

/**

 * @name PHPTree

 * @author crazymus < QQ:291445576 >

 * @des PHP生成树形结构,无限多级分类

 * @version 1.2.0

 * @Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )

 * @updated 2015-08-26



 */
class PHPTreeClass{

    protected static $config = array(
        /* 主键 */
        'primary_key' 	=> 'id',
        /* 父键 */
        'parent_key'  	=> 'parent_id',
        /* 展开属性 */
        'expanded_key'  => 'expanded',
        /* 叶子节点属性 */
        'leaf_key'      => 'leaf',
        /* 孩子节点属性 */
        'children_key'  => 'children',
        /* 是否展开子节点 */
        'expanded'    	=> false
    );

    /* 结果集 */
    protected static $result = array();

    /* 层次暂存 */
    protected static $level = array();
    /**

     * @name 生成树形结构

     * @param array 二维数组

     * @return mixed 多维数组

     */
    public static function makeTree($data,$options=array() ){
        $dataset = self::buildData($data,$options);
        $r = self::makeTreeCore(0,$dataset,'normal');
        return $r;
    }

    /* 生成线性结构, 便于HTML输出, 参数同上 */
    public static function makeTreeForHtml($data,$options=array()){

        $dataset = self::buildData($data,$options);
        $r = self::makeTreeCore(0,$dataset,'linear');
        return $r;
    }

    /* 格式化数据, 私有方法 */
    private static function buildData($data,$options){
        $config = array_merge(self::$config,$options);
        self::$config = $config;
        extract($config);

        $r = array();
        foreach($data as $item){
            $id = $item[$primary_key];
            $parent_id = $item[$parent_key];
            $r[$parent_id][$id] = $item;
        }

        return $r;
    }

    /* 生成树核心, 私有方法  */
    private static function makeTreeCore($index,$data,$type='linear')
    {
        extract(self::$config);
        foreach($data[$index] as $id=>$item)
        {
            if($type=='normal'){
                if(isset($data[$id]))
                {
                    $item[$expanded_key]= self::$config['expanded'];
                    $item[$children_key]= self::makeTreeCore($id,$data,$type);
                }
                else
                {
                    $item[$leaf_key]= true;
                }
                $r[] = $item;
            }else if($type=='linear'){
                $parent_id = $item[$parent_key];
                self::$level[$id] = $index==0?0:self::$level[$parent_id]+1;
                $item['level'] = self::$level[$id];
                self::$result[] = $item;
                if(isset($data[$id])){
                    self::makeTreeCore($id,$data,$type);
                }

                $r = self::$result;
            }
        }
        return $r;
    }
}


?>





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值