V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
awanganddong
V2EX  ›  PHP

请教个多叉树转化为数组的问题 将树状结构转化为列存入 mysql 中

  •  
  •   awanganddong · 2020-12-14 20:58:36 +08:00 · 1828 次点击
    这是一个创建于 1447 天前的主题,其中的信息可能已经有所发展或是发生改变。

    树的结构大概是这样的

    {
    	"start": "你是啊",
    	"end": "你是谁啊",
    	"content": "",
    	"msg_type": "",
    	"sub": [{
    		"start": "开始 1",
    		"end": "开始 2",
    		"content": "",
    		"msg_type": "",
    		"sub": [{
    			"start": "",
    			"end": "",
    			"content": "",
    			"msg_type": "",
    			"sub": [],
    			"name": "A1"
    		}, {
    			"start": "",
    			"end": "",
    			"content": "",
    			"msg_type": "",
    			"sub": [],
    			"name": "A2"
    		}, {
    			"start": "",
    			"end": "",
    			"content": "",
    			"msg_type": "",
    			"sub": []
    		}],
    		"name": "A"
    	}, {
    		"start": "B1",
    		"end": "B2 ",
    		"content": "",
    		"msg_type": "",
    		"sub": [{
    			"start": "这是 B1 的结构",
    			"end": "这是 B2 的结构",
    			"content": "",
    			"msg_type": "",
    			"sub": [],
    			"name": "B111"
    		}, {
    			"start": "",
    			"end": "",
    			"content": "",
    			"msg_type": "",
    			"sub": [],
    			"name": "B222"
    		}],
    		"name": "B"
    	}]
    }
    
    6 条回复    2020-12-14 22:16:47 +08:00
    felixin
        1
    felixin  
       2020-12-14 21:12:32 +08:00 via Android
    数据量小加列 parent id,数据量大上图数据库
    awanganddong
        2
    awanganddong  
    OP
       2020-12-14 21:22:06 +08:00
    @felixin 前端传递过来的值,我要处理为数组格式,存起来
    lithbitren
        3
    lithbitren  
       2020-12-14 21:28:00 +08:00
    每个对象通过一个唯一 id 来访问,sub 字段改成存 id,parent id 视情况可存可不存。
    awanganddong
        4
    awanganddong  
    OP
       2020-12-14 21:42:02 +08:00
    @lithbitren 前端只能给我提供这种结构,
    lithbitren
        5
    lithbitren  
       2020-12-14 22:09:00 +08:00
    @awanganddong 唯一 id 当然是后端甚至数据库生成的了,可以看作在用指针管理内存,id 就是指针地址。
    awanganddong
        6
    awanganddong  
    OP
       2020-12-14 22:16:47 +08:00
    ```
    public function tree2List($list, $pid = 0)
    {
    static $arr = [];
    $i = 1;
    foreach ($list as $item) {
    $subTree = $item['sub'];
    unset($item['sub']);
    $item['pid'] = $pid . $i;
    $arr[] = $item;
    if (is_array($subTree) && $subTree) {
    $this->tree2List($subTree, $item['pid']);
    }
    $i++;
    }
    return $arr;
    }
    ```

    结构写出来了

    现在唯一的不足就是用 pid 去定位子集元素这里处理起来比较麻烦


    @lithbitren 数据结构这里太薄弱了

    终于实现了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1080 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 23:35 · PVG 07:35 · LAX 15:35 · JFK 18:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.