درصورتی که یک آرایه ای داشته باشیم که شامل رابطه ی پدر فرزندی بین دو خانه ی آن باشد ولی بصورت زیر شاخه نباشند، بهتر است آن را برای فهم بهتر و استفاده راحت تر به شکل درختی دربیاورید. (توجه داشته باشید در PHP چون آرایه های چند بعدی حافظه ی زیادتر اشغال نمی کنند عملاً تغییر شکل آرایه ها و تشکیل آرایه های تودرتو در اشغال حافظه ی رم تاثیری ندارد)

به عنوان مثال جدولی بنام category در پایگاه داده داریم که این جدول شامل دو کلید id و parent_id می باشد که parent_id پدر فیلد مورد نظر است. همان طور که می دانید اگر با دستور select نتایج از دیتابیس مثلا MySQL خوانده شود آرایه ای به شکل زیر تحویل php می شود:

$items = array(
         array('id' => 42, 'parent_id' => 1),
         array('id' => 43, 'parent_id' => 42),
         array('id' => 1,  'parent_id' => 0),
);

حال برای استفاده راحتر باید آرایه به شکل زیر تبدیل شود :

array
(
    [id] => 1
    [parent_id] => 0
    [childs] => Array
        (
            [0] => 
                (
                    [id] => 42
                    [parent_id] => 1
                    [childs] => Array
                        (
                            [0] => 
                                (
                                    [id] => 43
                                    [parent_id] => 42
                                )
                        )
                )
        )
)

همان طور که مشاهده می کنید درخت ایجاد شده و شاخه ای بنام childs درصورتی که فرزندی وجود داشته باشد تشکیل می گردد. برای ایجاد چنین آرایه ای به کد php زیر دقت کنید...:

function buildTree($items) {

    $childs = array();

    foreach($items as $item)
        $childs[$item->parent_id][] = $item;

    foreach($items as $item) if (isset($childs[$item->id]))
        $item->childs = $childs[$item->id];

    return $childs[0];
}

$tree = buildTree($items);

تابع buildTree آرایه ی معمولی با دو کلید id و parent_id را دریافت کرده و خروجی درخت را return می کند. برای اینکه کد را کارآمد تر کنیم با کمی تغییر و استفاده از اشاره گر می توانیم کد زیر را نیز داشته باشیم که خروجی آن دقیقاً مشابه است ولی با اشغال حافظه رم کمتر و سریعتر:

function buildTree($items) {

    $childs = array();

    foreach($items as &$item) $childs[$item['parent_id']][] = &$item;
    unset($item);

    foreach($items as &$item) if (isset($childs[$item['id']]))
            $item['childs'] = $childs[$item['id']];

    return $childs[0];
}

$tree = buildTree($items);