使用 PHP 将给定 JSON 数据转换为三级下拉菜单 JSON 格式的代码及结果(汇付MCC编码)

<?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 等)的数据源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cesske

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值