PHP处理无限层级分类的递归函数

1

php 复制代码
function getCategoryTree($categories, $parent_id = 0) {
    $tree = array();
    
    foreach ($categories as $category) {
        if ($category['parent_id'] == $parent_id) {
            $children = getCategoryTree($categories, $category['id']);
            if ($children) {
                $category['children'] = $children;
            }
            $tree[] = $category;
        }
    }
    
    return $tree;
}

// 示例数据
$categories = array(
    array('id' => 1, 'name' => 'Category 1', 'parent_id' => 0),
    array('id' => 2, 'name' => 'Category 2', 'parent_id' => 0),
    array('id' => 3, 'name' => 'Category 1.1', 'parent_id' => 1),
    array('id' => 4, 'name' => 'Category 1.2', 'parent_id' => 1),
    array('id' => 5, 'name' => 'Category 1.1.1', 'parent_id' => 3),
);

$tree = getCategoryTree($categories);
print_r($tree);

在上面的例子中,getCategoryTree函数接受一个包含所有分类的数组和一个父分类ID作为参数,并递归地构建一个树形结构的数组。通过调用getCategoryTree函数并传入示例数据后,将会输出一个包含层级关系的分类树。您可以根据实际需求修改示例数据和函数逻辑。

2

php 复制代码
// 模拟分类数据
$categories = array(
    array('id' => 1, 'name' => '电子产品', 'parent_id' => 0),
    array('id' => 2, 'name' => '手机', 'parent_id' => 1),
    array('id' => 3, 'name' => '笔记本电脑', 'parent_id' => 1),
    array('id' => 4, 'name' => '家用电器', 'parent_id' => 0),
    array('id' => 5, 'name' => '电视', 'parent_id' => 4),
    array('id' => 6, 'name' => '冰箱', 'parent_id' => 4),
    array('id' => 7, 'name' => '空调', 'parent_id' => 4),
    array('id' => 8, 'name' => '服饰', 'parent_id' => 0),
    array('id' => 9, 'name' => '男装', 'parent_id' => 8),
    array('id' => 10, 'name' => '女装', 'parent_id' => 8),
    array('id' => 11, 'name' => '鞋类', 'parent_id' => 0),
    array('id' => 12, 'name' => '男鞋', 'parent_id' => 11),
    array('id' => 13, 'name' => '女鞋', 'parent_id' => 11),
    array('id' => 14, 'name' => '数码产品', 'parent_id' => 1),
    array('id' => 15, 'name' => '相机', 'parent_id' => 14),
    array('id' => 16, 'name' => '摄像机', 'parent_id' => 14),
    array('id' => 17, 'name' => '办公用品', 'parent_id' => 0),
    array('id' => 18, 'name' => '文具', 'parent_id' => 17),
    array('id' => 19, 'name' => '办公设备', 'parent_id' => 17),
    array('id' => 20, 'name' => '电脑配件', 'parent_id' => 1),
    array('id' => 21, 'name' => '显示器', 'parent_id' => 20),
    array('id' => 22, 'name' => '内存条', 'parent_id' => 20),
    array('id' => 23, 'name' => '游戏机', 'parent_id' => 1),
    array('id' => 24, 'name' => 'PS5', 'parent_id' => 23),
    array('id' => 25, 'name' => 'Switch', 'parent_id' => 23),
);
// 递归处理分类数据
function buildTree($categories, $parent_id = 0) {
    $tree = array();
    foreach ($categories as $category) {
        if ($category['parent_id'] == $parent_id) {
            $children = buildTree($categories, $category['id']);
            if ($children) {
                $category['children'] = $children;
            }
            $tree[] = $category;
        }
    }
    return $tree;
}
// 构建树形结构
$tree = buildTree($categories);
// 显示分类数据
function showTree($tree, $indent = 0) {
    foreach ($tree as $category) {
        echo str_repeat("--", $indent) . $category['name'] . "<br>";
        if (isset($category['children'])) {
            showTree($category['children'], $indent + 1);
        }
    }
}
// 调用函数显示树形结构
showTree($tree);</pre></div>
相关推荐
老白干2 小时前
jjwt 0.9.1 在 JDK 11+ 上的两个“坑”与完整解决方案
java·python·log4j
笨鸟先飞,勤能补拙8 小时前
AI 赋能网络安全:技术全景、成熟度评估与实战案例
人工智能·python·安全·web安全·网络安全·sqlite·github
郭老二9 小时前
【前端】vue3:编译步骤
前端
长和信泰光伏储能9 小时前
京津冀光伏发电:绿色能源的未来之路
python·能源
浦信仿真大讲堂9 小时前
从重复操作到自动化闭环:如何让 CST 与 Python 真正协同起来
python·自动化·cst·仿真软件·达索软件
不在逃避q10 小时前
Trae/Vs Code/Cursor命令行无法跑npm命令
前端·arcgis·npm
夏殇之殁10 小时前
包中创建自定义列表项。 . 使用自定义列表项进行数据绑定 . 将天气预报数据保存到本地内存表,通过LiveBindings进行显示。 ...
服务器·前端·javascript
The Chosen One98510 小时前
高进度算法模板速记(待完善)
java·前端·算法
Gu Gu Study10 小时前
ScoutLoop开放域深度研究引擎(agent的初步设计想法)
人工智能·python
陈随易10 小时前
MoonBit抓包模块pcap,查看电脑的每一次联网通信
前端·后端·程序员