У меня есть один пользователь, которого я буду считать корневым элементом моей древовидной структуры.
После этого у меня есть массив пользователей из моей базы данных, которые я считаю всеми дочерними элементами дерева.
Построение дерева должно содержать следующие переменные, которые определяют ширину и глубину дерева:
Variable: MATCHES_TREE_MAX_DEPTH (eg: 3)
Variable: MATCHES_TREE_ROOT_MAX_CHILDREN_AMOUNT (eg: 2)
Variable: MATCHES_TREE_PARENT_MAX_CHILDREN_AMOUNT (eg: 1)
Это означает, что я хочу создать древовидную структуру глубиной 3 (включая корневой элемент, поэтому я хочу на 2 уровня глубже). Корневой элемент имеет 2 дочерних элемента, в то время как у любого дочернего элемента будет максимум 1 дочерний элемент.
Порядок элементов в моем массиве пользователей - это порядок, в котором я хочу вставить их в дерево (я хочу вставить их сначала в ширину, а не в глубину).
Я нашел следующую универсальную функцию в SO: PHP - Как построить список древовидной структуры?
Но мне кажется, что я не могу адаптировать его к своему варианту использования, поскольку у меня нет отношений родитель-ребенок, исходящих из моей базы данных.
Этот SO-ответ возвращает мне массив, который выглядит похожим, но у меня возникли проблемы с преобразованием его в мой вариант использования:
PHP генерирует дерево по заданной глубине и правилам
Пример данных выглядит так:
Пользователь root:
object(stdClass)[56]
public 'user_id' => string '1' (length=1)
public 'first_name' => string 'Dennis' (length=6)
Другие пользователи (дети):
array (size=3)
0 =>
object(stdClass)[57]
public 'user_id' => string '2' (length=2)
public 'first_name' => string 'Tom' (length=3)
public 'street' => string 'Teststreet' (length=10)
1 =>
object(stdClass)[58]
public 'user_id' => string '3' (length=2)
public 'first_name' => string 'Mary' (length=1)
public 'street' => string 'Maryland avenue' (length=15)
2 =>
object(stdClass)[59]
public 'user_id' => string '4' (length=2)
public 'first_name' => string 'Jeff' (length=4)
public 'street' => string 'Teststreet' (length=10)
Пример дерева, которое я хочу получить с помощью заполненных примеров (принимая во внимание переменные 3 максимальной глубины, 2 дочерних элементов корня и 1 максимальных дочерних элементов любого другого элемента, кроме корневого):
Array
(
[userid] => 1
[name] => "Dennis"
[matches] => Array
(
[0] => Array
(
[userid] => 2
[name] => "Tom"
[street] => "Teststreet"
[matches] => Array
(
[0] => Array
(
[userid] => 4
[name] => "Jeff"
[street] => "Teststreet"
[matches] = Array()
)
)
)
[1] => Array
(
[userid] => 3
[name] => "Mary"
[street] => "Maryland avenue"
[matches] => Array
(
)
)
)
)
Как мне создать эту древовидную структуру с учетом 3 переменных, определяющих глубину и дочерних элементов?