【发布时间】:2017-10-16 04:19:36
【问题描述】:
我有一个数据库查询,它为我提供了一些员工数据的输出。我想使用这些数据传递给生成组织结构图的插件。我正在下拉的 JSON 对象中有几个字段是:
FirstName
LastName
EmployeeID
ManagerEmployeeID
Manager Name
数据以平面 JSON 对象的形式返回,员工及其经理在层次结构中没有嵌套或关联。
由于我无法更改源数据(数据库查询)的输出,因此我试图找出一种嵌套数据的方法,以便 JSON 输出成为嵌套输出。
我的目标是获取这个数组并根据 ManagerID 和 EmployeeID 嵌套它,这样我就可以创建一个树状层次结构。
示例数据:
• Tom Jones
o Alice Wong
o Tommy J.
• Billy Bob
o Rik A.
♣ Bob Small
♣ Small Jones
o Eric C.
我的平面数据示例:
{
"FirstName": "Tom"
"LastName": "Jones"
"EmployeeID": "123"
"ManagerEmployeeID": ""
"Manager Name": ""
},
{
"FirstName": "Alice"
"LastName": "Wong"
"EmployeeID": "456"
"ManagerEmployeeID": "123"
"Manager Name": "Tom Jones"
},
{
"FirstName": "Tommy"
"LastName": "J."
"EmployeeID": "654"
"ManagerEmployeeID": "123"
"Manager Name": "Tom Jones"
},
{
"FirstName": "Billy"
"LastName": "Bob"
"EmployeeID": "777"
"ManagerEmployeeID": ""
"Manager Name": ""
},
{
"FirstName": "Rik"
"LastName": "A."
"EmployeeID": "622"
"ManagerEmployeeID": "777"
"Manager Name": "Billy Bob"
},
{
"FirstName": "Bob"
"LastName": "Small"
"EmployeeID": "111"
"ManagerEmployeeID": "622"
"Manager Name": "Rik A."
},
{
"FirstName": "Small"
"LastName": "Jones"
"EmployeeID": "098"
"ManagerEmployeeID": "622"
"Manager Name": "Rik A"
},
{
"FirstName": "Eric"
"LastName": "C."
"EmployeeID": "222"
"ManagerEmployeeID": "777"
"Manager Name": "Billy Bob"
}
所需输出示例:
[
{
"FirstName": "Tom",
"LastName": "Jones",
"EmployeeID": "123",
"ManagerEmployeeID": "",
"Manager Name": "",
"employees": [
{
"FirstName": "Alice",
"LastName": "Wong",
"EmployeeID": "456",
"ManagerEmployeeID": "123",
"Manager Name": "Tom Jones"
},
{
"FirstName": "Tommy",
"LastName": "J.",
"EmployeeID": "654",
"ManagerEmployeeID": "123",
"Manager Name": "Tom Jones"
}
]
},
{
"FirstName": "Billy",
"LastName": "Bob",
"EmployeeID": "777",
"ManagerEmployeeID": "",
"Manager Name": "",
"employees": [
{
"FirstName": "Rik",
"LastName": "A.",
"EmployeeID": "622",
"ManagerEmployeeID": "777",
"Manager Name": "Billy Bob",
"employees": [
{
"FirstName": "Bob",
"LastName": "Small",
"EmployeeID": "111",
"ManagerEmployeeID": "622",
"Manager Name": "Rik A."
},
{
"FirstName": "Small",
"LastName": "Jones",
"EmployeeID": "098",
"ManagerEmployeeID": "622",
"Manager Name": "Rik A"
}
]
},
{
"FirstName": "Eric",
"LastName": "C.",
"EmployeeID": "222",
"ManagerEmployeeID": "777",
"Manager Name": "Billy Bob"
}
]
}
]
基本上,我正在尝试使用EmployeeID 和ManagerEmployeeID 作为两者之间的链接,从平面对象创建嵌套的 JSON 输出。
用 PHP 解决此类问题的最佳方法是什么?
赏金更新:
这是一个问题的测试用例:https://eval.in/private/4b0635c6e7b059
您将看到名称为Issue Here 的最后一条记录未显示在结果集中。这有一个与根节点匹配的managerID,应该在“Tom Jones”的employees 数组中。
【问题讨论】:
-
最好的方法 - 编写一些代码 - 测试它 - 修复任何错误 - 测试它...重复直到对结果满意为止
-
@RiggsFolly - 谢谢,我做到了,并让它与 Javascript 完美配合。 PHP 不是我的强项,所以我想弄清楚 PHP 和 JS 之间是否有任何通用函数可以实现这一点。 php有没有像JS这样的reduce方法可以做到这一点? jsfiddle.net/87ztvk8m
-
php 有
array_reduce功能。看看这里 - php.net/manual/en/function.array-reduce.php