У меня есть таблица db, описывающая иерархию. Вот структура
id | pid | uid
1 5 2
2 2 3
3 2 4
4 2 6
5 3 7
В древовидной структуре это будет выглядеть так. Это просто пример, их может быть намного больше узлов.
2
/ | \
3 4 6
/
7
Итак, в php и mysql я извлекаю все эти данные и сохраняю их в массив.
Я хочу пройти по этому массиву, чтобы определить, например, количество идентификаторов на определенном уровне, и я хочу иметь возможность получить все узлы на одном уровне.
Как это сделать в php?
ИЗМЕНИТЬ
Вот как я создаю свой массив:
foreach ( $resultSet as $row ) {
$entry = array();
$entry['id'] = $row->id;
$entry['uid'] = $row->uid;
$entry['rid'] = $row->rid;
$entry['date'] = $row->date;
$entries [] = $entry;
}
И вот как я создаю дерево сейчас, используя ответ
$tree = array();
foreach($entries as $key){
$this->adj_tree($tree, $key);
}
return $tree;
Но я получаю странный результат, когда печатаю $ tree
Array ( [24] => Array ( [id] => 6 [uid] => 24 [rid] => 83 [date] => 2011-06-15
17:54:14 ) [] => Array ( [_children] => Array ( [0] => Array ( [id] => 6 [uid] => 24
[rid] => 83 [date] => 2011-06-15 17:54:14 ) [1] => Array ( [id] => 6 [uid] => 24 [rid] =>
83 [date] => 2011-06-15 17:54:14 ) ) ) )
Но на самом деле должен быть один родитель с uid 24 с двумя дочерними элементами с rid 82 и 83