亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何從數據庫創建 JSON 樹

如何從數據庫創建 JSON 樹

PHP
神不在的星期二 2021-11-26 16:44:45
  “我正在設置一個文件瀏覽器并將文件夾的名稱保存在數據庫中。任何數量的文件夾都可以保存在數據庫中,我想從保存的數據中創建一個 json 樹。這是我的數據庫表結構folder_id    folder_name      parent_id  1          parentFolder1    <NULL>  2          parentFolder2    <NULL>  3          subFolder1          1  4          subFolder2          1  5          subFolder3          3  6          subFolder4          2  7          subFolder5          5parent_id 是指folder_id 的外鍵。這是我嘗試從上述數據庫創建的 json 樹結構,將來會添加更多父文件夾和子文件夾。如果可以從上面的表結構創建 json 樹?誰能幫幫我嗎?[    {        "id": "1",        "value": "parentFolder1",        "data": [            {                "id": "3",                "value": "subFolder1",                "data": [                    {                        "id": "5",                        "value": "subFolder3",                        "data": [                            {                                "id": "7",                                "value": "subFolder5",                                "data": []                                  ]                            }                        ]                    }            },            {                "id": "4",                "value": "subFolder2",                "data": []            }        ]    },    {        "id": "2",        "value": "parentFolder2",        "data": [            {                "id": "6",                "value": "subFolder4",                "data": []            }        ]    }]
查看完整描述

2 回答

?
滄海一幻覺

TA貢獻1824條經驗 獲得超5個贊

$arr = array(

  array('id'=>100, 'parentid'=>0, 'name'=>'a'),

  array('id'=>101, 'parentid'=>100, 'name'=>'a'),

  array('id'=>102, 'parentid'=>101, 'name'=>'a'),

  array('id'=>103, 'parentid'=>101, 'name'=>'a'),

);


$new = array();

foreach ($arr as $a){

    $new[$a['parentid']][] = $a;

}

$tree = createTree($new, array($arr[0]));

print_r($tree);


function createTree(&$list, $parent){

    $tree = array();

    foreach ($parent as $k=>$l){

        if(isset($list[$l['id']])){

            $l['data'] = createTree($list, $list[$l['id']]);

        }

        $tree[] = $l;

    } 

    return $tree;

}


查看完整回答
反對 回復 2021-11-26
?
有只小跳蛙

TA貢獻1824條經驗 獲得超8個贊

這是 C++ 代碼示例,這不是一個完美的代碼。您需要修改它以供您使用


#if 0

folder_id    folder_name      parent_id

  1          parentFolder1    <NULL>

  2          parentFolder2    <NULL>

  3          subFolder1          1

  4          subFolder2          1

  5          subFolder3          3

  6          subFolder4          2

  7          subFolder5          5

#endif

#include<stdio.h>

#include<iostream>

#include<vector>

#include<tuple>

#include <bits/stdc++.h>

#include<boost/property_tree/ptree.hpp>

#include <boost/property_tree/json_parser.hpp>

std::vector<std::tuple <int, std::string, int>> list;

namespace pt = boost::property_tree;

pt::ptree rootNode;

int main () {


    list.push_back(std::make_tuple(1, "parentFolder1", 0));

    list.push_back(std::make_tuple(2, "parentFolder2", 0));

    list.push_back(std::make_tuple(3, "subFolder1", 1));

    list.push_back(std::make_tuple(4, "subFolder2", 1));

    list.push_back(std::make_tuple(5, "subFolder3", 3));

    list.push_back(std::make_tuple(6, "subFolder4", 2));

    list.push_back(std::make_tuple(7, "subFolder5", 5));


    int x, y;

    int k = 0;

    pt::ptree mainRootNode;

    for (int i=0; i < list.size(); i++) {

        if (std::get<2>(list[i])) {

            continue;

        }

        k = 0;

        pt::ptree subMainRootNode;

        subMainRootNode.add("id", std::get<0>(list[i]));

        subMainRootNode.add("value", std::get<1>(list[i]));

        pt::ptree Node;

        y = x = std::get<0>(list[i]);

        int saved_place = 0;

        for (int j = 0; j < list.size(); j++) {

            if (x == std::get<2>(list[j])) {

                k++;

                std::string str;

                for(int m = 0;m < k; m++) {

                    str.append("data.");

                }

                pt::ptree child;

                std::string id = str + "id";

                std::string value = str + "value";

                subMainRootNode.add(id, std::get<0>(list[j]));

                subMainRootNode.add(value, std::get<1>(list[j]));

                x = std::get<0>(list[j]);

                if (!saved_place) {

                    saved_place = j;

                }

            }

            if (((j+1) == list.size()) && saved_place) {

                j = saved_place ;

                k = 0;

                saved_place = 0;

                x = y;

            }

        }

        mainRootNode.add_child("data", subMainRootNode);

        pt::write_json(std::cout, subMainRootNode);

    }

}



查看完整回答
反對 回復 2021-11-26
  • 2 回答
  • 0 關注
  • 240 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號