<?php
$array = [
  ['level'=>1, 'name' => 'Root #1'],
  ['level'=>1, 'name' => 'Root #2'],
  ['level'=>2, 'name' => 'subroot 2-1'],
  ['level'=>3, 'name' => '__subroot 2-1/1'],
  ['level'=>2, 'name' => 'subroot 2-2'],
  ['level'=>1, 'name' => 'Root #3']
];
 
function buildTree(array &$nodes) {
        $activeNodes = [];
       
        foreach ($nodes as $index => &$node) {
                $node['children'] = [];
                $level = $node['level'];
                $activeNodes[$level] = &$node;
               
                if ($level > 1) {
                        $activeNodes[$level - 1]['children'][] = &$node;
                        unset($nodes[$index]);
                }
        }
}
 
buildTree($array);
echo '<pre>';
var_dump($array);