Для новых требований:
$arr = array(
array('name' => 'aaa'),
array('name' => 'aaa\bbb'),
array('name' => 'aaa\bbb\ccc'),
array('name' => 'ddd'),
);
function traverse(array $array) {
$mark=array_shift($array);
return array($mark => $array ? traverse($array) : array() );
}
$out = array();
foreach($arr as $path)
{
($add=traverse(explode('\\',$path['name'])))
&& $out[key($add)]=current($add)
;
}
Выход:
array(2) {
["aaa"]=>
array(1) {
["bbb"]=>
array(1) {
["ccc"]=>
array(0) {
}
}
}
["ddd"]=>
array(0) {
}
}
Старый вопрос:
Старый вопрос имел следующие требования:
$arr = array(
0 => 'aaa',
1 => 'aaa\bbb',
2 => 'aaa\bbb\ccc',
);
function traverse(array $array) {
$mark=array_shift($array);
return $array ? array($mark => traverse($array)) : $mark;
}
$out = array();
foreach($arr as $path)
{
is_array($add=traverse(explode('\\',$path)))
&& $out[key($add)]=current($add)
;
}
Протестировано, выдав этот вывод:
array(1) {
["aaa"]=>
array(1) {
["bbb"]=>
string(3) "ccc"
}
}