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

2020-12-14 20:58:36 +08:00
 awanganddong

树的结构大概是这样的

{
	"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"
	}]
}
1824 次点击
所在节点    PHP
6 条回复
felixin
2020-12-14 21:12:32 +08:00
数据量小加列 parent id,数据量大上图数据库
awanganddong
2020-12-14 21:22:06 +08:00
@felixin 前端传递过来的值,我要处理为数组格式,存起来
lithbitren
2020-12-14 21:28:00 +08:00
每个对象通过一个唯一 id 来访问,sub 字段改成存 id,parent id 视情况可存可不存。
awanganddong
2020-12-14 21:42:02 +08:00
@lithbitren 前端只能给我提供这种结构,
lithbitren
2020-12-14 22:09:00 +08:00
@awanganddong 唯一 id 当然是后端甚至数据库生成的了,可以看作在用指针管理内存,id 就是指针地址。
awanganddong
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 数据结构这里太薄弱了

终于实现了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/735440

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX