当前位置:首页 > PHP开发 > PHP技巧 > 正文内容

PHP 不用递归实现无限极分类

Git开源网2022-04-11 22:42:10PHP技巧5441

无限极分类实现

数据表

ThinkPHP6数据分类.png

CREATE TABLE `zy_category` (
  `cat_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `pid` int(10) NOT NULL COMMENT '父分类',
  `catename` varchar(50) NOT NULL COMMENT '分类名',
  `dirname` varchar(255) DEFAULT NULL COMMENT '分类目录',
  `keywords` varchar(255) DEFAULT NULL COMMENT '关键词',
  `description` varchar(255) DEFAULT NULL COMMENT '描述',
  `sort` tinyint(10) NOT NULL DEFAULT '0' COMMENT '排序',
  `status` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '状态 0开启 1关闭',
  PRIMARY KEY (`cat_id`) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COMMENT='分类表';

PHP代码

    /**
     * 一维数据数组生成数据树
     * @param array $list 数据列表
     * @param string $id 父ID Key
     * @param string $pid ID Key
     * @param string $son 定义子数据Key
     * @return Collection
     */
    public static function arr2tree($list, $id = 'id', $pid = 'pid', $son = 'sub')
    {
        list($tree, $map) = [[], []];
        foreach ($list as $item) {
            $map[$item[$id]] = $item;
        }
 
        foreach ($list as $item) {
            if (isset($item[$pid]) && isset($map[$item[$pid]])) {
                $map[$item[$pid]][$son][] = &$map[$item[$id]];
            } else {
                $tree[] = &$map[$item[$id]];
            }
        }
        unset($map);
        return $tree;
    }
     /**
     * 一维数据数组生成数据树
     * @param array $list 数据列表
     * @param string $id ID Key
     * @param string $pid 父ID Key
     * @param string $path
     * @param string $ppath
     * @return array
     */
    public static function arr2table($list, $id = 'id', $pid = 'pid', $path = 'path', $ppath = '')
    {
        $tree = [];
        foreach (self::arr2tree($list, $id, $pid) as $attr) {
            $attr[$path] = "{$ppath}-{$attr[$id]}";
            $attr['sub'] = isset($attr['sub']) ? $attr['sub'] : [];
            $attr['spt'] = substr_count($ppath, '-');
            $attr['spl'] = str_repeat(" ├ ", $attr['spt']);
            $sub         = $attr['sub'];
            unset($attr['sub']);
            $tree[] = $attr;
            if (!empty($sub)) {
                $tree = array_merge($tree, self::arr2table($sub, $id, $pid, $path, $attr[$path]));
            }
        }
        return $tree;
    }

输出示例:arr2tree

Array
(
    [0] => Array
        (
            [cat_id] => 1
            [pid] => 0
            [catename] => Javascript前端
            [dirname] => javascript
            [keywords] => Javascript前端,Javascript,HTML5+CSS3,jQuery,vue.js,Bootstrap,Ajax,Nodejs
            [description] => Javascript前端栏目发布由站长精心撰写的有关WEB前端开发方面的技术文章,探讨最新最流行的Javascript前端技术,提供在线演示demo和源码下载,最实用强大的WEB技术分享就在www.helloweba.net
            [sort] => 0
            [status] => 0
        )

    [1] => Array
        (
            [cat_id] => 2
            [pid] => 0
            [catename] => PHP后端
            [dirname] => php
            [keywords] => PHP,PHP7,PHP后端,PHP教程,Swoole,Laravel,ThinkPHP,全栈,PHP实例,PHP源码下载
            [description] => PHP后端栏目发布由站长精心撰写的有关WEB后端开发方面的技术文章,探讨最新最流行的PHP后端技术,提供在线演示demo和源码下载,最实用强大的WEB技术分享就在www.helloweba.net
            [sort] => 0
            [status] => 0
        )

    [2] => Array
        (
            [cat_id] => 3
            [pid] => 0
            [catename] => HTML前端
            [dirname] => html
            [keywords] => 
            [description] => 
            [sort] => 0
            [status] => 0
            [sub] => Array
                (
                    [0] => Array
                        (
                            [cat_id] => 4
                            [pid] => 3
                            [catename] => CSS
                            [dirname] => css
                            [keywords] => 
                            [description] => 
                            [sort] => 0
                            [status] => 0
                            [sub] => Array
                                (
                                    [0] => Array
                                        (
                                            [cat_id] => 7
                                            [pid] => 4
                                            [catename] => 测试分类
                                            [dirname] => test
                                            [keywords] => 
                                            [description] => 
                                            [sort] => 0
                                            [status] => 0
                                        )

                                )

                        )

                    [1] => Array
                        (
                            [cat_id] => 5
                            [pid] => 3
                            [catename] => Node.js
                            [dirname] => nodejs
                            [keywords] => 
                            [description] => 
                            [sort] => 0
                            [status] => 0
                        )

                )

        )

    [3] => Array
        (
            [cat_id] => 6
            [pid] => 0
            [catename] => 其他编程
            [dirname] => other
            [keywords] => 
            [description] => 
            [sort] => 0
            [status] => 0
        )

)


扫描二维码推送至手机访问。

版权声明:本文由Git开源网_git开源代码资源网_git开源博客发布,如需转载请注明出处。

本文链接:http://gitoscc.com/?id=868

相关文章

zblog php 文章版权设置

zblog php 文章版权设置

以zblog php任意模板为例,找到模板目录里的zb_users\theme\***\template\post-single.php,打开后在添加位置{$article.Content}下添加代码:<div style=...

李炎恢PHP第一季视频教程

李炎恢PHP第一季视频教程课程简介:PHP是一种目前最流行的服务端Web程序开发语言之一。PHP主要的特点是语法简单易于学习、功能强大、灵活易用。在融合了现代编程语言的一些最佳特性后,PHP、Apache和MySQL的组合已成为Web服务器...

php 分页原理详解

在看本文之前,请确保你已掌握了PHP的一些知识以及MYSQL的查询操作基础哦。作为一个Web程序,经常要和不计其数的数据打交道,比如会员的数据,文章数据,假如只有几十个会员那很好办,在一页显示就可以了,可是假如你的网站是几千甚至几十万会员的...

php自定义模板引擎类

 php自定义模板引擎类<?php     /**         file: mytpl...

PHP用户注册邮箱验证激活帐号

PHP用户注册邮箱验证激活帐号

我们在很多网站注册会员时,注册完成后,系统会自动向用户的邮箱发送一封邮件,这封邮件的内容就是一个URL链接,用户需要点击打开这个链接才能激活之前在该网站注册的帐号。激活成功后才能正常使用会员功能。 本文将结合实例,讲解如何使用PH...

PHP常用正则表达式大全

PHP常用正则表达式大全匹配数字"^\d+$"  //非负整数(正整数 + 0)"^[0-9]*[1-9][0-9]*$"  //正整数"^((-\d+)|(0+))$"  //非...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。