V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
awanganddong
V2EX  ›  PHP

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

  •  
  •   awanganddong · Dec 14, 2020 · 2213 views
    This topic created in 1961 days ago, the information mentioned may be changed or developed.

    树的结构大概是这样的

    {
    	"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 replies    2020-12-14 22:16:47 +08:00
    felixin
        1
    felixin  
       Dec 14, 2020 via Android
    数据量小加列 parent id,数据量大上图数据库
    awanganddong
        2
    awanganddong  
    OP
       Dec 14, 2020
    @felixin 前端传递过来的值,我要处理为数组格式,存起来
    lithbitren
        3
    lithbitren  
       Dec 14, 2020
    每个对象通过一个唯一 id 来访问,sub 字段改成存 id,parent id 视情况可存可不存。
    awanganddong
        4
    awanganddong  
    OP
       Dec 14, 2020
    @lithbitren 前端只能给我提供这种结构,
    lithbitren
        5
    lithbitren  
       Dec 14, 2020
    @awanganddong 唯一 id 当然是后端甚至数据库生成的了,可以看作在用指针管理内存,id 就是指针地址。
    awanganddong
        6
    awanganddong  
    OP
       Dec 14, 2020
    ```
    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 数据结构这里太薄弱了

    终于实现了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3786 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 10:31 · PVG 18:31 · LAX 03:31 · JFK 06:31
    ♥ Do have faith in what you're doing.