Я работаю над сайтом, использующим двоичную систему mlm.Рекурсивно сортировать массив до уровней
Так у меня есть две таблицы в базе данных, пользователи Anad отношений. В пользователях есть идентификаторы и столбцы персональных данных. Отношения имеют 4 столбца: ID, parentID, childID, pos. Где pos находится либо влево, либо вправо.
Я успешно написал функцию, которая рекурсивно перечисляет все дочерние элементы данного pid (parentID). Однако мне нужно сортировать его по уровням (для отображения и расчета).
У меня есть массив детей пользователя ID = 1:
Array
(
[0] => Array
(
[id] => 2
[parentID] => 1
[pos] => l
)
[1] => Array
(
[id] => 4
[parentID] => 2
[pos] => l
)
[2] => Array
(
[id] => 8
[parentID] => 4
[pos] => l
)
[3] => Array
(
[id] => 5
[parentID] => 2
[pos] => p
)
[4] => Array
(
[id] => 3
[parentID] => 1
[pos] => p
)
[5] => Array
(
[id] => 6
[parentID] => 3
[pos] => l
)
[6] => Array
(
[id] => 7
[parentID] => 3
[pos] => p
)
)
Теперь у меня есть функция с именем get_levels, который возвращает многомерный массив, который должен выглядеть следующим образом:
Array
(
[0] => Array
(
[0] => Array
(
[id] => 2
[parentID] => 1
[pos] => l
)
[1] => Array
(
[id] => 3
[parentID] => 1
[pos] => p
)
)
[1] => Array
(
[0] => Array
(
[id] => 4
[parentID] => 2
[pos] => l
)
[1] => Array
(
[id] => 5
[parentID] => 2
[pos] => p
)
[2] => Array
(
[id] => 6
[parentID] => 3
[pos] => l
)
[3] => Array
(
[id] => 7
[parentID] => 3
[pos] => p
)
)
ETC.
)
Вот функция:
function get_levels($pid,$level, $level_id){
$children = children_array($pid,1);
if (sizeof($children) > 0):
foreach ($children as $child):
if ($child["parentID"] == $pid):
get_levels($child["id"], $level, $level_id+1);
$level[$level_id][] = $child;
endif;
endforeach;
endif;
return $level;
}
функция chi ldren_array ($ pid, $ depth) возвращает детей ... для $ depth = 1 возвращает немедленных детей (0 или 1 или 2), для $ depth = 0 возвращает всех детей
Может ли кто-нибудь помочь мне с этим функционировать? Я думаю, что функция работает, однако Я не знаю, как рекурсивно использовать и добавлять в массив.
Я нашел этот двоичный класс дерева: http://www.phpclasses.org/browse/file/11713.html Каким должен быть лучший способ хранения данных в базе данных? ID | parentID | leftChildID | rightChildID? – Smaug
Для данных я хотел бы ссылаться только на родителя и может занимать позицию, если нет другого способа понять это. Узел, у которого нет родителя, является корнем. –