You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP递归处理无限层级分类数组 查找指定ID对应全链路父分类

实现方案

调整后可运行代码

/**
 * 查找目标分类ID对应的完整父级路径及关联子分类结构
 * @param int $targetId 目标子分类ID
 * @param array $categories 顶层分类数组
 * @return array|null 匹配到的路径结构,未找到返回null
 */
function getCategoryFullPath(int $targetId, array $categories): ?array
{
    foreach ($categories as $category) {
        // 匹配到目标分类直接返回
        if ($category['id'] === $targetId) {
            return $category;
        }
        // 递归遍历子分类
        if (!empty($category['subCategories'])) {
            $matchedSub = getCategoryFullPath($targetId, $category['subCategories']);
            if ($matchedSub !== null) {
                // 若需保留父分类下所有兄弟子分类,删除下一行代码即可
                $category['subCategories'] = [$matchedSub];
                return $category;
            }
        }
    }
    return null;
}

// 调用示例
$res = getCategoryFullPath(5208, $categories);

原代码问题说明

  • 每次进入函数都执行$holder = []清空了递归积累的结果,只能拿到最后一次匹配的内容
  • 没有父级追溯逻辑,仅匹配到目标ID所在层级后就直接合并平级内容,无法封装上层父分类信息
  • 递归逻辑遍历所有键值对,没有针对分类节点结构做定向判断,容易误匹配其他数组内容

效果说明

默认返回的结果会保留从顶层父分类到目标子分类的完整层级路径,每个层级仅保留关联的子分类节点;如果需要保留父分类下所有兄弟子分类,删除代码中注释标注的那一行即可。

内容的提问来源于stack exchange,提问作者user7322312

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 23:48:03