// build a map tid->term
foreach ($terms as &$term) {
$tree[$term->tid] = &$term;
}
// add child links to every node
foreach ($terms as &$term) {
foreach ($term->parents as $parent) {
if ($parent != 0) {
$tree[$parent]->children[] = &$term;
}
}
}
// remove non-root terms
foreach ($tree as $tid => $term) {
if ($term->parents[0] != 0) {
}
}