<?php
// 原始JSON数据
$jsonData = '[
{
"HFMCC大类名称": "居民服务与商业服务",
"HFMCC小类名称": "维修及其他专业服务",
"HFMCC名称": "兽医服务",
"HFMCC code": "0742"
},
// 省略其他条目...
]';
// 解析JSON数据
$data = json_decode($jsonData, true);
// 构建三级菜单结构
$menu = [];
foreach ($data as $item) {
$category = $item['HFMCC大类名称'];
$subcategory = $item['HFMCC小类名称'];
$name = $item['HFMCC名称'];
$code = $item['HFMCC code'];
// 查找大类
$categoryIndex = array_search($category, array_column($menu, 'label'));
if ($categoryIndex === false) {
// 大类不存在,创建新大类
$menu[] = [
'label' => $category,
'value' => $category, // 可自定义大类值,此处用名称标识
'children' => [
[
'label' => $subcategory,
'value' => $subcategory, // 小类值用名称标识
'children' => [
[
'label' => $name,
'value' => $code
]
]
]
]
];
} else {
// 查找小类
$subcategoryExists = false;
foreach ($menu[$categoryIndex]['children'] as &$subcat) {
if ($subcat['label'] === $subcategory) {
// 小类存在,添加子项
$subcat['children'][] = [
'label' => $name,
'value' => $code
];
$subcategoryExists = true;
break;
}
}
if (!$subcategoryExists) {
// 小类不存在,创建新小类
$menu[$categoryIndex]['children'][] = [
'label' => $subcategory,
'value' => $subcategory,
'children' => [
[
'label' => $name,
'value' => $code
]
]
];
}
}
}
// 转换为JSON格式并输出
header('Content-Type: application/json');
echo json_encode($menu, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
?>
关键说明:
数据结构:
一级菜单(大类):label为大类名称,value可自定义(此处用名称标识)
二级菜单(小类):label为小类名称,value为小类名称
三级菜单(具体项):label为具体名称,value为HFMCC code
重复处理:
自动去重大类和小类,相同名称的大类 / 小类会合并子项
输出格式:
[
{
"label": "居民服务与商业服务",
"value": "居民服务与商业服务",
"children": [
{
"label": "维修及其他专业服务",
"value": "维修及其他专业服务",
"children": [
{ "label": "兽医服务", "value": "0742" },
{ "label": "ETC不停车自动缴费", "value": "4113" },
// 其他维修类子项...
]
},
{
"label": "商业服务",
"value": "商业服务",
"children": [
{ "label": "农业合作", "value": "0763" },
{ "label": "景观美化及园艺服务", "value": "0780" },
// 其他商业服务子项...
]
}
]
},
{
"label": "直销类",
"value": "直销类",
"children": [
{
"label": "直销商户",
"value": "直销商户",
"children": [
{ "label": "葡萄酒生产商", "value": "0743" },
{ "label": "其他酒类生产商", "value": "0744" },
// 其他直销商户子项...
]
}
]
}
]
使用注意:
若需要自定义value值(如使用唯一标识),可修改大类 / 小类的value生成逻辑
原始数据中的空值或异常数据需要额外添加校验逻辑
可通过调整JSON_PRETTY_PRINT参数控制输出格式(压缩 / 格式化)
该结构符合三级下拉菜单的典型数据格式,可直接用于前端组件(如 Element UI 的 Cascader、Ant Design 的 Cascader 等)的数据源。