php一次性输出三级联动数据json格式

发布于 2022-09-11 14:24:28 字数 1908 浏览 24 评论 0

有下面这样一张数据表
图片描述

然后要一次性输出这样的json数据:

$.rawCitiesData = [
  {
    "name":"北京",
    "code":"对应的数据id",
    "sub": [
      {
        "name": "北京市",
        "code": "对应的数据id",
        "sub":[
            {
              "name":"东城区",
              "code":"110101"
            },
            {
              "name":"西城区",
              "code":"110102"
            },
            {
              "name":"朝阳区",
              "code":"110105"
            },
            {
              "name":"丰台区",
              "code":"110106"
            },
            {
              "name":"石景山区",
              "code":"110107"
            },
            {
              "name":"海淀区",
              "code":"110108"
            },
            {
              "name":"门头沟区",
              "code":"110109"
            },
            {
              "name":"房山区",
              "code":"110111"
            },
            {
              "name":"通州区",
              "code":"110112"
            },
            {
              "name":"顺义区",
              "code":"110113"
            },
            {
              "name":"昌平区",
              "code":"110114"
            },
            {
              "name":"大兴区",
              "code":"110115"
            },
            {
              "name":"怀柔区",
              "code":"110116"
            },
            {
              "name":"平谷区",
              "code":"110117"
            },
            {
              "name":"密云县",
              "code":"110228"
            },
            {
              "name":"延庆县",
              "code":"110229"
            }
        ]
      }
    ]
  },

只用输出数据表中的id和name 其余字段都不需要

数据表说明
pid=0表示顶级分类
child如果等于1表示还有下级分类

还请大神赐教,这个php该怎么写啊

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

墨离汐 2022-09-18 14:24:28

两种方案,第一种是使用递归,遍历所有数据。
第二种是从第一级循环到第三级,因为你的数据貌似只有三级。

未央 2022-09-18 14:24:28
<?php
// 假设 pid 决定父子关系
// 下面的数组一次性从数据库获取完,可以做缓存
$items = [
    [
        'name' => '北京',
        'code' => '1',
        'pid' => '0'
    ],
    [
        'name' => '北京市',
        'code' => '2',
        'pid' => '1'
    ],
    [
        'name' => '东城区',
        'code' => '110101',
        'pid' => '2'
    ],
    [
        'name' => '西城区',
        'code' => '110102',
        'pid' => '2'
    ]
];
$generateTree = function ($items, $parentKey = 'pid') {
    $tree = $temp = [];
    foreach ($items as $item) {
        $temp[$item['code']] = $item;
    }
    foreach ($items as $item) {
        if (isset($temp[$item[$parentKey]])) {
            $temp[$item[$parentKey]]['sub'][] = &$temp[$item['code']];
        } else {
            $tree[] = &$temp[$item['code']];
        }
        // 下面可以去掉 pid 元素
        unset($temp[$item['code']][$parentKey]);
    }
    return $tree;
};

print_r($generateTree($items));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文