<?php
$array = [
'a' => ['children' => ['b', 'c']],
'b' => ['children' => ['ba', 'bb']],
'c' => ['children' => []],
'ba' => ['children' => []],
'bb' => ['children' => ['bba']],
'bba' => ['children' => []]
];
function expand(&$source, $item) {
$result = ['children' => $item['children']];
foreach($item['children'] as $key) {
$result[$key] = expand($source, $source[$key]);
$source[$key] = [];
}
return $result;
}
foreach($array as $key => $value) {
if(!empty($array[$key])) { $result[$key] = expand($array, $value);
}
}
PD9waHAKCiRhcnJheSA9IFsKICAnYScgPT4gWydjaGlsZHJlbicgPT4gWydiJywgJ2MnXV0sCiAgJ2InID0+IFsnY2hpbGRyZW4nID0+IFsnYmEnLCAnYmInXV0sCiAgJ2MnID0+IFsnY2hpbGRyZW4nID0+IFtdXSwKICAnYmEnID0+IFsnY2hpbGRyZW4nID0+IFtdXSwKICAnYmInID0+IFsnY2hpbGRyZW4nID0+IFsnYmJhJ11dLAogICdiYmEnID0+IFsnY2hpbGRyZW4nID0+IFtdXQogXTsKCmZ1bmN0aW9uIGV4cGFuZCgmJHNvdXJjZSwgJGl0ZW0pIHsKCSRyZXN1bHQgPSBbJ2NoaWxkcmVuJyA9PiAkaXRlbVsnY2hpbGRyZW4nXV07IAoKCWZvcmVhY2goJGl0ZW1bJ2NoaWxkcmVuJ10gYXMgJGtleSkgewoJCSRyZXN1bHRbJGtleV0gPSBleHBhbmQoJHNvdXJjZSwgJHNvdXJjZVska2V5XSk7CgkJJHNvdXJjZVska2V5XSA9IFtdOyAKCX0KCglyZXR1cm4gJHJlc3VsdDsKfQoKZm9yZWFjaCgkYXJyYXkgYXMgJGtleSA9PiAkdmFsdWUpIHsKCWlmKCFlbXB0eSgkYXJyYXlbJGtleV0pKSB7CgkJJHJlc3VsdFska2V5XSA9IGV4cGFuZCgkYXJyYXksICR2YWx1ZSk7Cgl9Cn0KCnByaW50X3IoJHJlc3VsdCk7