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>';
}
复制代码