Код:

$tree = array();
    
foreach ($dataset as $id => &$node) {    
    if (($node['parent_id'] != NULL) && ($node['parent_id'] != '')) {
        $tree[$node['parent_id']]['Children'][$node['id']] = &$node;
    } else {
        $tree[$node['id']] = &$node;
    }
}

return $tree;

В итоге имея массив:

Код:

Array
(
    [0] => Array
        (
            [id] => 3
            [name] => Бег
            [parent_id] => 
        )

    [1] => Array
        (
            [id] => 5
            [name] => Беговые дорожки
            [parent_id] => 3
        )

    [2] => Array
        (
            [id] => 4
            [name] => Тяжелая атлетика
            [parent_id] => 
        )

    [3] => Array
        (
            [id] => 6
            [name] => Штанги
            [parent_id] => 4
        )

)

Получим:

Код:

Array
(
    [3] => Array
        (
            [id] => 3
            [name] => Бег
            [parent_id] => 
            [Children] => Array
                (
                    [5] => Array
                        (
                            [id] => 5
                            [name] => Беговые дорожки
                            [parent_id] => 3
                        )

                )

        )

    [4] => Array
        (
            [id] => 4
            [name] => Тяжелая атлетика
            [parent_id] => 
            [Children] => Array
                (
                    [6] => Array
                        (
                            [id] => 6
                            [name] => Штанги
                            [parent_id] => 4
                        )

                )

        )

)