Crear árbol desde nodo hijo

Tengo una matriz llena de elementos como estos:

array( array( 'id' => 1, 'name' => 'parent 1', 'parent_id' => null ), array( 'id' => 2, 'name' => 'child of parent 1', 'parent_id' => 1 ), array( 'id' => 3, 'name' => 'grand child of parent 1', 'parent_id' => 2 ), array( 'id' => 4, 'name' => 'parent 2', 'parent_id' => null ), array( 'id' => 5, 'name' => 'child of parent 2', 'parent_id' => 4 ), ); 

Y mi pregunta es: ¿cómo puedo construir un árbol para un niño conocido? Por ejemplo, si sé que la identificación es 3, necesito obtener una variedad de elementos, incluidos los identificadores 1, 2 y 3.

Gracias.

Tal vez algo así:

 function build($tab, $id) { $res = array(); $node = $tab[$id]; $i = 0; do { $res[$i] = node; $node = $tab[$node['parent_id']]; $i++; } while( $node != null); return $res; }