Некоторое очень простое, общее построение дерева:
function buildTree(array $elements, $parentId = 0) {
$branch = array();
foreach ($elements as $element) {
if ($element['parent_id'] == $parentId) {
$children = buildTree($elements, $element['id']);
if ($children) {
$element['children'] = $children;
}
$branch[] = $element;
}
}
return $branch;
}
$tree = buildTree($rows);
Алгоритм довольно прост:
0
/ nothing / null
/ whatever). parent_id
элемента совпадает с текущим родительским идентификатором, который вы получили 1., элемент является дочерним элементом родителя. Поместите его в список текущих детей (здесь: $branch
). children
. Другими словами, одно выполнение этой функции возвращает список элементов, которые являются дочерними данного родительского идентификатора. Вызовите его с помощью buildTree($myArray, 1)
, он вернет список элементов, у которых есть родительский идентификатор 1. Первоначально эта функция вызывается с родительским идентификатором, равным 0, поэтому возвращаются элементы без родительского идентификатора, которые являются корневыми узлами. Функция вызывает себя рекурсивно, чтобы найти детей детей.