Функция (а точнее метод класса) getTree работает следующим образом:
Она поэлементно обрабатывает массив (или ArrayIterator) расположенный в $this->data
Если в рассматриваемом элементе массива, есть нет ключа parent_id (или он эквивалентен false), то он добавляется на первый уровень массива $tree (родительский элемент)
Иначе - он добавляется в элемент childs соответствующему родителю (если он конечно есть)
Рассмотрим ситуацию, когда у нас в $this->data находится следующее значение:
array(
1 => array(
name => test1,
parent_id => 0
),
2 => array(
name => test2,
parent_id => 1
),
3 => array(
name => test3,
parent_id => 1
),
)
Таким образом пропуская его через эту функцию на выходе будет:
array(
1 => array(
name => test1,
parent_id => 0,
childs => array(
2 => array(
name => test2,
parent_id => 1
),
3 => array(
name => test3,
parent_id => 1
),
)
)
)
А вот если предположить что входной массив был другим, например:
array(
2 => array(
name => test2,
parent_id => 1
),
1 => array(
name => test1,
parent_id => 0
),
3 => array(
name => test3,
parent_id => 1
),
)
То на выходе будет соответственно:
array(
1 => array(
name => test1,
parent_id => 0,
childs => array(
3 => array(
name => test3,
parent_id => 1
),
)
)
)