文档章节

无限级分类信息格式化工具类

lovyhuihui
 lovyhuihui
发布于 2015/04/05 17:26
字数 678
阅读 17
收藏 1

    分类功能在很多web应用中都是必须的, 尤其是商城中尤为重要. 而对无限级分类信息的格式化也是web编程的基本的技能之一. 这里分享一个无限级分类的格式化工具类. 

    本来是将其中的方法都作为静态方法直接使用, 回来发现很多时候大家分类信息中的分类id的名称各不相同, 所以又加了一个构造方法, 指定分类id字段.

<?php
/**
 * 分类信息格式化工具类
 */

class Category {
    protected $sonName;
    protected $parentName;

    /**
     * 初始化工作
     * @param string $son    子类标识的名称
     * @param string $parent 父类标识的名称
     */
    public function __construct($son = 'id', $parent = 'pid') {
        $this->sonName = $son;
        $this->parentName = $parent;
    }

    /**
     * 根据传递的父类ID获取所有的子级分类
     * 组合一维数组
     * @param  [type]  $data 分类数组
     * @param  integer $pid  父类id
     * @param  integer $lev  父类所属层级
     * @return [type]        格式化后的数组信息
     */
    public function unlimitedForLevel($data, $pid = 0, $lev = 0) {
        $arr = array();

        foreach($data as $v) {
            if($v[$this->parentName] == $pid) {
                $v['lev'] = $lev + 1;
                $arr[] = $v;
                $arr = array_merge($arr, self::unlimitedForLevel($data, $v[$this->sonName], $lev + 1));
            }
        }

        return $arr;
    }

    /**
     * 根据传递的父类ID获取所有的子级分类
     * 组合多维数组
     * @param  [type]  $data 分类数组
     * @param  integer $pid  父类id
     * @return [type]        格式化后的数组信息
     */
    public function unlimitedForLayer($data, $pid = 0) {
        $arr = array();

        foreach($data as $v) {
            if($v[$this->parentName] == $pid) {
                $v['children'] = self::unlimitedForLayer($data, $v[$this->sonName]);
                $arr[] = $v;
            }
        }

        return $arr;
    }

    /**
     * 根据传递子类ID获取所有的父级分类
     * @param  [type]  $data 分类数组
     * @param  integer $id   子类id
     * @return [type]        父类数组信息
     */
    public function getParents($data, $id) {
        $arr = array();

        foreach($data as $v) {
            if($v[$this->sonName] == $id) {
                $arr[] = $v;
                $arr = array_merge(self::getParents($data, $v[$this->parentName]), $arr);
            }
        }

        return $arr;
    }

    /**
     * 根据传递的父类ID获取所有的子级分类ID
     * 注意返回值中不包括传递进来的父类ID
     * @param  [type] $data 分类数组
     * @param  [type] $pid  父类id
     * @return [type]       子类id数组
     */
    public function getChildsID($data, $pid) {
        $arr =array();

        foreach($data as $v) {
            if($v[$this->parentName] == $pid) {
                $arr[] = $v[$this->sonName];
                $arr = array_merge($arr, self::getChildsID($data, $v[$this->sonName]));
            }
        }

        return $arr;
    }

    /**
     * 根据传递的子类ID获取所有的父类ID
     * 注意返回值中不包括传递进来的子类ID
     * @param  [type] $data 分类数组
     * @param  [type] $id   子类id
     * @return [type]       父类id数组
     */
    public function getParentsID($data, $id) {
        $arr = array();

        foreach($data as $v) {
            if($v[$this->sonName] == $id) {
                $arr[] = $v[$this->parentName];
                $arr = array_merge($arr, self::getParentsID($data, $v[$this->parentName]));
            }
        }

        return $arr;
    }
}


© 著作权归作者所有

共有 人打赏支持
lovyhuihui
粉丝 0
博文 1
码字总数 678
作品 0
海淀
程序员
私信 提问
【Mysql左右值】左右值法实现Mysql无限级分类

数据表结构和数据 表结构 [sql] view plaincopy CREATE TABLE ( INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, VARCHAR(20) NOT NULL COLLATE 'utf8generalci', INT(11) NOT NULL, INT(11) NO......

bengozhong
2016/09/09
8
0
请教 关于MySQL的一个复杂查询。

你好,想跟你请教个问题: 关于一个mysql的查询,各表如下。 说明:表1是商户信息表,其中1个法人可以拥有很多店,location字段对映表2的location_id,表示所在楼层。 说明:表2是商场位置表...

Crazy罗小杰
2012/10/11
738
4
快速开发ASP的类--EasyASP

EasyASP 是一个简单方便的用来快速开发ASP程序的类库。EasyASP 包含完善的全参数化查询多数据库操作、高效Json数据生成与解析、各种字符串及日期处理函数、功能强大动态数组处理、领先的文件...

匿名
2010/09/09
5.5K
0
coldstone/easyasp

##EasyASP v3.0 作者 : coldstone (coldstone[at]qq.com) 官网 : http://www.easyasp.cn GIT : https://git.coding.net/coldstone/easyasp.git git 镜像: GitHub : https://github.com/cold......

coldstone
2015/02/11
0
0
是我狼/RapidDB

RapidDB 轻量级数据库操作组件 支持事务嵌套 PDO支持 JSON支持 类的实例集合支持 轻量级 可以轻易和其他框架整合 多数据库多连接支持 ##使用方式 ###通过composer安装 $ composer require s...

是我狼
2015/12/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何在网络视听行业建一扇内容安全大门?

在人工智能飞速发展的三年里,整个网络视听产业数字化发展速度非常迅猛。大数据作为如今这个时代的产物,正不断推动整个产业的发展。网络视听行业中存在海量的数据,比如视频内容、视频浏览量...

阿里云官方博客
14分钟前
0
0
云安全简史

课程介绍: DT时代我们每个人的生活在不知不觉中与云计算发生了千丝万缕的联系,起床、吃饭、出行、社交、工作、娱乐、购物等大多数应用都在云上,然而安全事件频发时刻在为我们敲响警钟,面对...

mcy0425
16分钟前
1
0
数字IT基础-数据采集总线

摘要: 日志服务是阿里自产自用的产品,在双十一、双十二和新春红包期间承载阿里云/蚂蚁全站、阿里电商板块、云上几千商家数据链路,每日处理来自百万节点几十PB数据,峰值流量达到每秒百GB,...

阿里云云栖社区
19分钟前
0
0
身为极客,一道题测出你究竟有多机智!|活动推荐

似乎所有极客都是天生的偏执狂。 这就像对程序员的调侃那样, 说这个世界在他们眼里只有0和1, 介于中间的有什么?不存在的。 作为平均智商最高的群体而言 程序员是最具有极客精神的一个群体...

UCloudTech
20分钟前
1
0
芯片制造与中国技术

接下来的思路就简单了,如何把这30吨东西,集成到指甲那么大的地方上呢?这就是芯片。 芯片制造与中国技术 为了把30吨的运算电路缩小,工程师们把多余的东西全扔了,直接在硅片上制作PN结和电...

天王盖地虎626
26分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部