Это легко сделать в PHP ... Для этого вам понадобятся два массива и два , в то время как циклы.
Этот код сделает дерево таким, каким вы хотели, для неопределенной глубины и количества детей.
Вставить в рабочий код.
Используя ссылки, давайте представим, что все сохранено в массиве $ data с такой структурой: (id, comment, parent_id)
где parent_id указывает на id .
Код для построения дерева.
$tree = array();
reset($data);
while (list($k, $v) = each($data))
if (0 == ($pid = $v['parent_id']))
$tree[$k] =& $data[$k]; else
$data[$pid]['children'][$k] =& $data[$k];
И для генерации глубины и количества дочерних элементов.
reset($data);
while (list($k, $v) = each($data))
if (0 != $v['parent_id'])
{
$ref =& $data[$k];
$depth = 0;
do
{
if ($depth) $ref =& $data[$ref['parent_id']];
$dre =& $ref['depth'];
if (!isset($dre) || $dre <= $depth) $dre = $depth++;
if (isset($ref['children']))
$ref['child_count'] = count($ref['children']);
else
{
$ref['child_count'] = 0;
$ref['children'] = null;
}
}
while ($ref['parent_id']);
}
Весь мой код был написан на лету и даже не проверен, поэтому, если есть какие-либо ошибки, пожалуйста, простите меняеееееееее !!!!!!!!!!! ← Забудьте об этом, я пробовал , исправил пару проблем и теперь работает отлично.
Примечание
Чтобы этот код работал, индекс каждого элемента должен быть равен его идентификатору.
Массив, который я использовал, чтобы попробовать код.
$data = array(
'1' => array('id' => '1', 'comment' => 'a', 'parent_id' => 0),
'2' => array('id' => '2', 'comment' => 'b', 'parent_id' => 0),
'3' => array('id' => '3', 'comment' => 'c', 'parent_id' => 1),
'4' => array('id' => '4', 'comment' => 'd', 'parent_id' => 1),
'5' => array('id' => '5', 'comment' => 'e', 'parent_id' => 2),
'6' => array('id' => '6', 'comment' => 'f', 'parent_id' => 2),
'7' => array('id' => '7', 'comment' => 'g', 'parent_id' => 5),
'8' => array('id' => '8', 'comment' => 'h', 'parent_id' => 7)
);