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

PHP多维数组单层扁平化:分类层级结构转换需求

解决嵌套分类数组扁平化问题,提取id和name生成JSON

嘿,我来帮你搞定这个需求!你已经用递归生成了嵌套的分类层级,现在要把所有分类的id和name提取到单层数组里转成JSON对吧?

首先得明确:我们要做的不是把多维数组完全拆成一维(比如把所有值都平铺),而是遍历每一层的分类节点,只保留每个节点的id和name,最终形成一个包含所有分类对象的单层数组。

用递归实现的具体方案(以PHP为例)

假设你的嵌套数组是用children字段存储子分类的(如果你的键名不一样,后面改一下就行),我们可以写一个递归函数来遍历所有层级:

function flattenCategories($categories) {
    $flatList = [];

    foreach ($categories as $category) {
        // 先把当前分类的id和name加入结果
        $flatList[] = [
            'id' => $category['id'],
            'name' => $category['name']
        ];

        // 如果有子分类,递归处理子分类并合并结果
        if (!empty($category['children'])) {
            $flatList = array_merge($flatList, flattenCategories($category['children']));
        }
    }

    return $flatList;
}

// 调用函数并转成JSON
$flatCategories = flattenCategories($yourNestedCategoryArray);
$jsonResult = json_encode($flatCategories, JSON_PRETTY_PRINT);

echo $jsonResult;

效果示例

假设你的嵌套数组是这样的:

$nestedCategories = [
    [
        'id' => 1,
        'name' => '顶级分类A',
        'children' => [
            [
                'id' => 223,
                'name' => 'A的子分类',
                'children' => [
                    ['id' => 456, 'name' => 'A的孙分类']
                ]
            ]
        ]
    ],
    [
        'id' => 789,
        'name' => '顶级分类B'
    ]
];

运行代码后得到的JSON会是:

[
    {
        "id": 1,
        "name": "顶级分类A"
    },
    {
        "id": 223,
        "name": "A的子分类"
    },
    {
        "id": 456,
        "name": "A的孙分类"
    },
    {
        "id": 789,
        "name": "顶级分类B"
    }
]

注意事项

  • 如果你的子分类字段不是children(比如叫sub_categories),只需要把代码里的$category['children']替换成你的实际键名就行。
  • 这个方法不管你的分类有多少层级,都能把所有节点的id和name提取出来,完全满足你的需求。

内容的提问来源于stack exchange,提问作者digitalcreative.tech

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:52:40