PHP 无限级分类

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>';
}

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>';
}

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值