数据库提取的扁平数据结构转树状结构的算法

发布于 2022-09-03 00:38:48 字数 226 浏览 13 评论 0

从数据库中取出的数据,如
省, 市, 区
山东,济南,a区
山东,济南,m区
山东,青岛,b区
江苏,南京,a区

转化为(可看作是json):

山东:
    济南:
        a区
        m区
    青岛:
        b区
江苏:
    南京:
        a区

请问有没有好的算法?

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

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

发布评论

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

评论(3

注定孤独终老 2022-09-10 00:38:48

省市区依次作为第一第二第三关键字,然后检查前后对于相同的合并。

断桥再见 2022-09-10 00:38:48

id pid设计难道不是更简洁,还用设计三个字段

风吹短裙飘 2022-09-10 00:38:48

数据库要有 id,pid字段,一次把有有要用的数据读出来,然后按父子关系,递归的地把它存到一个多维数组,
写了个例子,写不得好不要喷我

<?php
$city = array(
    0 => array('id' => '1','pid' => '0','name' => '广西',) ,
    1 => array('id' => '2','pid' => '1','name' => '南宁',) ,
    2 => array('id' => '3','pid' => '1','name' => '桂林',) ,
    3 => array('id' => '6','pid' => '0','name' => '广东',) ,
    4 => array('id' => '7','pid' => '6','name' => '广州',) ,
    5 => array('id' => '8','pid' => '6','name' => '东莞',) ,
);
function get_tree($data, $pid = 0, $parent_key_name = 'parentid', $get_all_child = true) {
    $tmp = array();
    foreach ($data as $key => $value) {
        if ($value[$parent_key_name] == $pid) {
            $tmp[$key] = $value;
            unset($data[$key]);
            if ($get_all_child) {
                $child = get_tree($data, $value['id'], $parent_key_name, $get_all_child);
                if (!empty($child)) {
                    $tmp[$key]['child'] = $child;
                }
            }
        }
    }
    if ($get_all_child) {
        $pid++;
    }
    return $tmp;
}
$new_city = get_tree($city, 0, 'pid', true);
var_dump($new_city);

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