У меня есть запрос к базе данных, который дает мне вывод некоторых данных о сотрудниках. Я хочу использовать эти данные для перехода к плагину, который генерирует диаграмму org. В объекте 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"
}
]
}
]
Иногда я пытаюсь создать вложенный вывод JSON из плоского объекта с использованием EmployeeID
и ManagerEmployeeID
в качестве связей между ними.
Каков наилучший способ решить что-то подобное с помощью PHP?
Обновление Bounty:
Вот тестовый пример проблемы: https://eval.in/private/4b0635c6e7b059
Вы увидите, что самая последняя запись с именем Issue Here
не отображается в наборе результатов. У этого есть managerID
, который соответствует корню node и должен находиться внутри массива employees
Тома Джонса.