【发布时间】:2017-11-03 00:39:40
【问题描述】:
我正在使用递归创建带有嵌套集模型的 JSON。我的结果没有像预期的那样出现,因为这个 JSON 帮助我生成了一棵树。括号不是必需的 JSON。
我正在尝试创建一个像 http://fperucic.github.io/treant-js/examples/evolution-tree/example6.js 这样的 json。我对 nodeStructure: { }
感兴趣问题:
每个孩子都有 { } 但需要 [ ]
不需要数字键
json 键不应出现在 "text"、"children"、"name" 等引号中,而应不含引号
在线编译器:https://3v4l.org/UsXPv
<?php
$category = '{"9":{"id":"9","btc_mlm_user_id":"0","lft":"1","rht":"16","lvl":"0","name":"Root","created":"2017-06-27 05:56:11","modified":"2017-06-27 05:56:11","first_name":"","last_name":"","username":""},"42":{"id":"42","btc_mlm_user_id":"25","lft":"2","rht":"13","lvl":"1","name":"naresh","created":"2017-11-02 10:22:24","modified":"2017-11-02 10:22:24","first_name":"","last_name":"","username":"naresh"},"44":{"id":"44","btc_mlm_user_id":"27","lft":"3","rht":"4","lvl":"2","name":"rahul1","created":"2017-11-02 10:25:53","modified":"2017-11-02 10:25:53","first_name":"","last_name":"","username":"rahul1"},"45":{"id":"45","btc_mlm_user_id":"28","lft":"5","rht":"6","lvl":"2","name":"rahul123","created":"2017-11-02 10:27:19","modified":"2017-11-02 10:27:19","first_name":"","last_name":"","username":"rahul123"},"46":{"id":"46","btc_mlm_user_id":"29","lft":"7","rht":"12","lvl":"2","name":"kapil1","created":"2017-11-02 10:28:20","modified":"2017-11-02 10:28:20","first_name":"","last_name":"","username":"kapil1"},"47":{"id":"47","btc_mlm_user_id":"30","lft":"8","rht":"11","lvl":"3","name":"priya12","created":"2017-11-02 10:30:30","modified":"2017-11-02 10:30:30","first_name":"","last_name":"","username":"priya12"},"48":{"id":"48","btc_mlm_user_id":"31","lft":"9","rht":"10","lvl":"4","name":"amit12","created":"2017-11-02 10:32:00","modified":"2017-11-02 10:32:00","first_name":"","last_name":"","username":"amit12"},"43":{"id":"43","btc_mlm_user_id":"26","lft":"14","rht":"15","lvl":"1","name":"roshan","created":"2017-11-02 10:24:27","modified":"2017-11-02 10:24:27","first_name":"","last_name":"","username":"roshan"}}';
function tree($data, $left = 0, $right = null)
{
$tree = array();
foreach ($data as $key => $value)
{
if ($value['lft'] == $left + 1 && (is_null($right) || $value['rht'] < $right))
{
$tree[$key]['text'] = ['name' => $value['name']];
$tree[$key]['children'] = tree($data, $value['lft'], $value['rht']);
$left = $value['rht'];
}
}
return $tree;
}
$tree = tree(json_decode($category, true));
echo json_encode($tree);
输出:
{
"9": {
"text": {
"name": "Root"
},
"children": {
"42": {
"text": {
"name": "naresh"
},
"children": {
"44": {
"text": {
"name": "rahul1"
},
"children": []
},
"45": {
"text": {
"name": "rahul123"
},
"children": []
},
"46": {
"text": {
"name": "kapil1"
},
"children": {
"47": {
"text": {
"name": "priya12"
},
"children": {
"48": {
"text": {
"name": "amit12"
},
"children": []
}
}
}
}
}
}
},
"43": {
"text": {
"name": "roshan"
},
"children": []
}
}
}
}
需要的输出:
{
text: {
name: "Root"
},
children: [{
text: {
name: "naresh"
},
children: [{
text: {
name: "rahul1"
},
children: [
[]
],
text: {
name: "rahul123"
},
children: [
[]
],
text: {
name: "kapil1"
},
children: [{
text: {
name: "priya12"
},
children: [{
text: {
name: "amit12"
},
children: [
[]
]
}]
}]
}],
text: {
name: "roshan"
},
children: [
[]
]
}]
}
这是我在此处获取的 MySql 记录,以便在开始时以 $category json 格式向您展示。
【问题讨论】:
-
您的实际输出和所需输出似乎相同。你是不是贴错东西了?
-
@ADyson 抱歉 - 这是我在编辑时的错误。不是 OP 的错。
-
@Johan 您尝试创建的数据结构无效,因为您在对象中重复了相同的键名
-
您的“必需”输出仍然无效,因此我们无法帮助您实现这一目标。例如,您不能在同一个对象中拥有多个名为“文本”的属性。 children 需要是多个对象的数组,而不是您现在拥有的包含单个对象(然后包含多个重复属性)的数组。
-
好吧,这与您在问题中发布的所需结构不同,是吗?在这种情况下,请用您实际想要的内容更新问题。如果您看不出区别,请仔细查看您链接到的示例。