protected function traverseTree($tree, $branch, $newLeaf, $pos = null, $prepend = false, $depth = 0)
{
$t = array();
foreach ($tree as $leaf) {
if ((null === $pos || $pos == $depth) && $leaf['name'] == $branch) {
if (isset($leaf['children'])) {
$leaf['children'] = $prepend ? array_merge(array($newLeaf), $leaf['children']) : array_merge($leaf['children'], array($newLeaf));
} else {
$leaf['children'] = array($newLeaf);
}
}
if (isset($leaf['children'])) {
$leaf['children'] = $this->traverseTree($leaf['children'], $branch, $newLeaf, $pos, $prepend, $depth + 1);
}
$t[] = $leaf;
}
return $t;
}