Обход массива как дерева в php

У меня есть таблица 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

5
задан Upvote 16 June 2011 в 14:27
поделиться