首页 > 编程语言 >PHP 无限级分类

PHP 无限级分类

时间:2024-08-06 10:08:53浏览次数:10  
标签:arr cate 分类 pid value 无限 PHP id name

1)无限级分类处理

复制代码
<?php

// 准备分类原始数据
$cate_arr = [
    ['id'=>1,'name'=>'电脑','pid'=>0],
    ['id'=>2,'name'=>'手机','pid'=>0],
    ['id'=>3,'name'=>'戴尔','pid'=>1],
    ['id'=>4,'name'=>'联想','pid'=>1],
    ['id'=>5,'name'=>'苹果','pid'=>2],
    ['id'=>6,'name'=>'华为','pid'=>2],
    ['id'=>7,'name'=>'戴尔XPS','pid'=>3],
    ['id'=>8,'name'=>'苹果12','pid'=>5]
];

// 递归处理无限级分类
function getTree ($cate_arr = [] , $pid = 0 , $level = 0)
{
    static $cate_tree_arr = [];
    foreach ($cate_arr as $key=>$value) {
        if ($value['pid'] == $pid) {
            $value['level'] = $level;
            $cate_tree_arr[] = $value;
            getTree($cate_arr,$value['id'],$level+1);
        }
    }
    return $cate_tree_arr;
}

// 显示无限级分类菜单
$cate_tree_arr = getTree($cate_arr);
foreach ($cate_tree_arr as $key=>$value) {
    echo str_repeat("|----",$value['level']).$value['name'].'<br>';
}
复制代码

PHP无限极分类

2)根据指定分类项查找其父级分类

复制代码
<?php

// 准备分类原始数据
$cate_arr = [
    ['id'=>1,'name'=>'电脑','pid'=>0],
    ['id'=>2,'name'=>'手机','pid'=>0],
    ['id'=>3,'name'=>'戴尔','pid'=>1],
    ['id'=>4,'name'=>'联想','pid'=>1],
    ['id'=>5,'name'=>'苹果','pid'=>2],
    ['id'=>6,'name'=>'华为','pid'=>2],
    ['id'=>7,'name'=>'戴尔XPS','pid'=>3],
    ['id'=>8,'name'=>'苹果12','pid'=>5]
];

// 查找指定菜单记录的父级分类
function getDeepPath ($cate_arr = [] , $current_cate_arr = [])
{
    static $cate_deep_cate_arr = [];
    if (empty($cate_deep_cate_arr)) {
        $cate_deep_cate_arr[] = $current_cate_arr;
    }
    foreach ($cate_arr as $key=>$value) {
        if ($current_cate_arr['pid'] == $value['id']) {
            $cate_deep_cate_arr[] = $value;
            getDeepPath($cate_arr,$value);
        }
    }
    return $cate_deep_cate_arr;
}

// 显示父级分类层次
$cate_deep_cate_arr = getDeepPath($cate_arr,$cate_arr[7]);
krsort($cate_deep_cate_arr);
foreach ($cate_deep_cate_arr as $key=>$value) {
    echo ' -> '.$value['name'];
}
复制代码

3)根据指定分类查找其子级分类 

复制代码
<?php

// 准备分类原始数据
$cate_arr = [
    ['id'=>1,'name'=>'电脑','pid'=>0],
    ['id'=>2,'name'=>'手机','pid'=>0],
    ['id'=>3,'name'=>'戴尔','pid'=>1],
    ['id'=>4,'name'=>'联想','pid'=>1],
    ['id'=>5,'name'=>'苹果','pid'=>2],
    ['id'=>6,'name'=>'华为','pid'=>2],
    ['id'=>7,'name'=>'戴尔XPS','pid'=>3],
    ['id'=>8,'name'=>'苹果4','pid'=>5],
    ['id'=>9,'name'=>'苹果6','pid'=>5],
    ['id'=>10,'name'=>'苹果12','pid'=>5]
];

// 递归处理无限级分类
function getTree ($cate_arr = [] , $pid = 0 , $level = 0)
{
    static $cate_tree_arr = [];
    foreach ($cate_arr as $key=>$value) {
        if ($value['pid'] == $pid) {
            $value['level'] = $level;
            $cate_tree_arr[] = $value;
            getTree($cate_arr,$value['id'],$level+1);
        }
    }
    return $cate_tree_arr;
}

// 显示无限级分类菜单(注意:这里在传参时直接指定想要查询的编号作为pid即可)
$cate_tree_arr = getTree($cate_arr,2);
foreach ($cate_tree_arr as $key=>$value) {
    echo str_repeat("|----",$value['level']).$value['name'].'<br>';
}
复制代码

标签:arr,cate,分类,pid,value,无限,PHP,id,name
From: https://www.cnblogs.com/bastblogs/p/18344589

相关文章

  • RSA非对称加密,前端JS加密,后端PHP解密
    RSA公钥/私钥在线生成:http://web.chacuo.net/netrsakeypair通过以上网址生成公钥/私钥对,私钥格式这里选择【PKCS#1】,如:公钥:-----BEGINPUBLICKEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDN3El4yr2maFvDo5PKIzkkiitJZEOTLNINH0RD0PL5Lob+YzbRJO6DX27SRuHcdlK7mFtkQvooW......
  • js、php实现前后端数据的base64编码和解码
    客户要求密码必须加密后再传送。javascript代码的加密函数:<scriptlanguage='javascript'>functionutf16to8(str){varout,i,len,c;out="";len=str.length;for(i=0;i<len;i++){c=str.charCodeAt(i);if(......
  • PHP中的魔术常量(如__FILE__,__LINE__)及其用途
    在PHP中,魔术常量是一组预定义的常量,它们会根据它们使用的上下文环境而改变其值。这些常量以两个下划线字符开始和结束。魔术常量提供了有关代码执行环境的有用信息,例如当前文件的路径、当前行号等。以下是几个常用的PHP魔术常量及其用途:__FILE__:用途:__FILE__ 魔术常量返......
  • PHP中的引用传递和值传递的区别以及示例代码
    在PHP中,函数的参数传递主要有两种方式:值传递(PassbyValue)和引用传递(PassbyReference)。理解这两种传递方式对于编写高效、可维护的PHP代码至关重要。值传递(PassbyValue)值传递是PHP中的默认参数传递方式。当使用值传递时,函数内部对参数所做的任何修改都不会影响到函数外部......
  • PHP中如何实现函数的可变参数列表
    在PHP中,实现函数的可变参数列表主要有两种方式:使用func_get_args()函数和使用可变数量的参数(通过...操作符,自PHP5.6.0起引入)。1.使用func_get_args()函数func_get_args()函数用于获取传递给函数的参数列表,并作为一个数组返回。这种方式不需要在函数定义时明确指定参数的数......
  • C++11革新之旅:探索C++编程的无限可能
    C++11革新之旅:探索C++编程的无限可能C++11,作为C++语言的一个重要标准,为C++编程带来了革命性的变革。它不仅引入了众多新特性和改进,还极大地增强了C++的表达能力、提高了程序的性能和资源利用率。本文将从多个方面深入探讨C++11的新特性,并解析这些特性如何改变C++编程的方式......
  • 人才招聘系统的设计与实现/PHP/招聘网站/计算机设计/毕业项目
    摘    要随着互联网时代的来临,当今世界的生活的节奏变的越来越快,大众对工作效率的标准也变得越来越高,报名参加人才招聘会耗时耗力,无目的性的信息搜索任务量大,且成功的可能性低。为了能够方便大众利用互联网投递个人简历寻找适宜的就业机会,也使企业可以利用在线互联网进......
  • es: php访问elasticsearch:索引库和doc文档是否存在的判断
    一,判断一个索引库是否存在:$response=$client->indices()->exists(['index'=>$this->index_name]);$statusCode=$response->getStatusCode();var_dump($statusCode);if($statusCode==200){echo"索引库存......
  • mysql 行级锁(按照粒度分类)
    MySQL支持多种锁机制,以确保数据的一致性和完整性。其中,行级锁(Row-LevelLocking)是一种细粒度的锁机制,能够锁定单行数据,从而允许高并发访问。本文将简要介绍MySQL行级锁的概念、使用场景及其优缺点。行级锁的概念行级锁是一种细粒度的锁机制,允许事务在操作数据时仅锁定特定的行,而......
  • 计算机毕业设计必看必学!! 85583 springboot高校网上选课系统,原创定制程序, java、PHP
                                                  摘要本论文主要论述了如何使用JAVA语言开发一个高校网上选课系统,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,......