我的编程空间,编程开发者的网络收藏夹
学习永远不晚

php 实现无限极分类树 (引用和递归)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

php 实现无限极分类树 (引用和递归)

这里首先介绍一下,什么是无限极分类?

无限极分类简单点说就是一个类可以分成多个子类,然后一个子类又可以分另外多个子类这样无限分下去,就好象windows可以新建一个文件夹,然后在这个文件夹里又可以建一些个文件夹,在文件夹底下还可以建一些文件夹一样

示例如图:

PHP又是如何实现它的无限分类的呢?如何把它的各个分类一一列出来呢?

方法一、递归思想

PHP大部分人用递归来写生成树,不过PHP默认最多递归次数为100,并不是理论上的无限,其次递归的内存占有过大,php的内存分配是除了对象,其余的为直接copy内存,所以有时候会导致内存占用过大

 public function generateTree($items , $pId)    {        $tree = [];        foreach($items as $k => $v)        {            if($v['pid'] == $pId)            {                if (!empty($this->generateTree($items , $v['id'])))                    {                        $v['childs'] = $this->generateTree($items , $v['id']);              }                $tree[] = $v;            }        }        return $tree;    }generateTree($array,0);

缺点: 一旦数据量大,耗时非常长,影响性能.

二、引用思想

// 例子:$arr=array(        array('id'=>'1','name'=>'北京','pid'=>'0'),        array('id'=>'2','name'=>'上海','pid'=>'0'),        array('id'=>'3','name'=>'浦东','pid'=>'2'),        array('id'=>'4','name'=>'朝阳','pid'=>'1'),        array('id'=>'5','name'=>'广州','pid'=>'0'),        array('id'=>'6','name'=>'三里屯','pid'=>'4'),       array('id'=>'7','name'=>'广东','pid'=>'5'),       array('id'=>'8','name'=>'三里','pid'=>'4'),      array('id'=>'10','name'=>'小胡同','pid'=>'8')      );   

 首先 : 利用数组的索引与主键的id号相同来查找子栏目,首先为数组加上索引:

$arr=array(        1=>array('id'=>'1','name'=>'北京','pid'=>'0'),        2=>array('id'=>'2','name'=>'上海','pid'=>'0'),        3=>array('id'=>'3','name'=>'浦东','pid'=>'2'),        4=>array('id'=>'4','name'=>'朝阳','pid'=>'1'),        5=>array('id'=>'5','name'=>'广州','pid'=>'0'),        6=>array('id'=>'6','name'=>'三里屯','pid'=>'4'),       7=>array('id'=>'7','name'=>'广东','pid'=>'5'),       8=>array('id'=>'8','name'=>'三里','pid'=>'4'),      10=>array('id'=>'10','name'=>'小胡同','pid'=>'8')      );   

利用索引的下标,判断该栏目是否存在父栏目,如果存在就把该栏目放到父栏目的son子数组里面 

 function generateTree($items){       $index_items = [];        foreach ($items as $item) {            $index_items[$item['id']] = $item;        }        $tree = array();        foreach($index_items as $item){            //判断是否有数组的索引==            if(isset($index_items[$item['pid']])){     //查找数组里面是否有该分类  如 isset($items[0])  isset($items[1])                $index_items[$item['pid']]['son'][] = &$index_items[$item['id']]; //上面的内容变化,$tree里面的值就变化            }else{                $tree[] = &$index_items[$item['id']];   //把他的地址给了$tree            }        }        return $tree;    }       generateTree($array);

***进阶版:  参数默认可传

function tree(        array $array,        string $first,        string $pid,        string $id,        string $child = 'childs'    ): array {        $tree = [];        foreach ($array as $item) {            $tree[$item[$id]] = $item;        }        foreach ($tree as $item) {            $tree[$item[$pid]][$child][] = &$tree[$item[$id]];        }        return $tree[$first][$child] ?? [];    }    tree($array,'1','pid','id');

参考: php实现无限极分类_叶落无痕的博客-CSDN博客_无限极分类

来源地址:https://blog.csdn.net/harris_lele/article/details/123243012

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

php 实现无限极分类树 (引用和递归)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

PHP如何实现无限极分类生成树

这篇文章主要介绍了PHP如何实现无限极分类生成树,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。无限极分类生成树function generateTree($items){
2023-06-03

怎么使用php递归实现无限级分类

使用PHP递归实现无限级分类的步骤如下:1. 创建一个数组或从数据库中获取分类数据,包含id和parent_id字段,表示分类的唯一标识和父级分类的标识。2. 创建一个递归函数,接受两个参数:分类数据和父级分类的id。3. 在递归函数中,遍
2023-09-29

php无限极分类怎么实现

在 PHP 中实现无限级分类可以使用递归的方法来实现。以下是一个示例代码:// 定义一个函数来获取指定父级分类的子级分类function getChildCategories($parentId, $categories) {$chil
2023-10-27

php实现无限极分类的方法

小编给大家分享一下php实现无限极分类的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!php实现无限极分类的方法:首先创建一个PHP示例文件;然后编写逻辑代码
2023-06-14

php+mysql实现的无限分类方法类定义与使用示例

本文实例讲述了php+mysql实现的无限分类方法类定义与使用。分享给大家供大家参考,具体如下: 创建数据库以及表CREATE DATABASE `sortclass`DEFAULT CHARSET utf8;CREATE TABLE IF
2022-05-23

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录