【PHP无限分类】无限分类树(支持子分类排序)

浏览:6737 发布日期:2017/08/15 分类:功能实现 关键字: 无限分类树 无限分类
无限分类树(支持子分类排序)
version:1.4
author:Veris
website:www.mostclan.com
更多PHP姿势尽在http://www.mostclan.com,欢迎大家一起编程划水!

ClassTree.class.php<?php
/**
 * 无限分类树(支持子分类排序)
 * version:1.4
 * author:Veris
 * website:www.mostclan.com
 */
class ClassTree {
    /**
     * 分类排序(降序)
     */
    static public function sort($arr,$cols){
        //子分类排序
        foreach ($arr as $k => &$v) {
            if(!empty($v['sub'])){
                $v['sub']=self::sort($v['sub'],$cols);
            }
            $sort[$k]=$v[$cols];
        }
        if(isset($sort))
            array_multisort($sort,SORT_DESC,$arr);
        return $arr;
    }
    /**
     * 横向分类树
     */
    static public function hTree($arr,$pid=0){
        foreach($arr as $k => $v){
            if($v['pid']==$pid){
                $data[$v['id']]=$v;
                $data[$v['id']]['sub']=self::hTree($arr,$v['id']);
            }
        }
        return isset($data)?$data:array();
    }
    /**
     * 纵向分类树
     */
    static public function vTree($arr,$pid=0){
        foreach($arr as $k => $v){
            if($v['pid']==$pid){
                $data[$v['id']]=$v;
                $data+=self::vTree($arr,$v['id']);
            }
        }
        return isset($data)?$data:array();
    }
}
使用例子:<?php
include 'ClassTree.class.php';
//===========================Example===========================
$arr=array(
    array('id'=>1,'pid'=>0,'name'=>'浙江','sort'=>0),
    array('id'=>10,'pid'=>1,'name'=>'宁波','sort'=>0),
    array('id'=>13,'pid'=>1,'name'=>'金华','sort'=>1),
    array('id'=>4,'pid'=>0,'name'=>'上海','sort'=>2),
    array('id'=>5,'pid'=>4,'name'=>'闵行','sort'=>0),
    array('id'=>6,'pid'=>10,'name'=>'宁海','sort'=>0),
);
$arr=ClassTree::sort($arr,'sort');
$data=ClassTree::vTree($arr);
$data2=ClassTree::hTree($arr);
echo '<pre>';
print_r($data);
print_r($data2);
返回例子:Array
(
    [4] => Array
        (
            [id] => 4
            [pid] => 0
            [name] => 上海
            [sort] => 2
        )

    [5] => Array
        (
            [id] => 5
            [pid] => 4
            [name] => 闵行
            [sort] => 0
        )

    [1] => Array
        (
            [id] => 1
            [pid] => 0
            [name] => 浙江
            [sort] => 0
        )

    [13] => Array
        (
            [id] => 13
            [pid] => 1
            [name] => 金华
            [sort] => 1
        )

    [10] => Array
        (
            [id] => 10
            [pid] => 1
            [name] => 宁波
            [sort] => 0
        )

    [6] => Array
        (
            [id] => 6
            [pid] => 10
            [name] => 宁海
            [sort] => 0
        )

)
Array
(
    [4] => Array
        (
            [id] => 4
            [pid] => 0
            [name] => 上海
            [sort] => 2
            [sub] => Array
                (
                    [5] => Array
                        (
                            [id] => 5
                            [pid] => 4
                            [name] => 闵行
                            [sort] => 0
                            [sub] => Array
                                (
                                )

                        )

                )

        )

    [1] => Array
        (
            [id] => 1
            [pid] => 0
            [name] => 浙江
            [sort] => 0
            [sub] => Array
                (
                    [13] => Array
                        (
                            [id] => 13
                            [pid] => 1
                            [name] => 金华
                            [sort] => 1
                            [sub] => Array
                                (
                                )

                        )

                    [10] => Array
                        (
                            [id] => 10
                            [pid] => 1
                            [name] => 宁波
                            [sort] => 0
                            [sub] => Array
                                (
                                    [6] => Array
                                        (
                                            [id] => 6
                                            [pid] => 10
                                            [name] => 宁海
                                            [sort] => 0
                                            [sub] => Array
                                                (
                                                )

                                        )

                                )

                        )

                )

        )

)
评论( 相关
后面还有条评论,点击查看>>