Оттолкнулся от твоего варианта, вышло что-то такое:
$a = ['catalogue/car/audi/a4', 'catalogue/car/audi/a5', 'catalogue/car', 'catalogue'];
function stringToArray($path)
{
$path = explode('/', $path);
$key = array_shift($path);
if(count($path) > 0){
$result = array(
$key => stringToArray(implode('/',$path)),
);
return $result;
}else{
return array($key => []);
}
}
$result = array_map('stringToArray', $a);
$final = [];
foreach($result as $res) {
$final = array_merge_recursive($res, $final);
}
Иерархия адекватная:
Array
(
[catalogue] => Array
(
[car] => Array
(
[audi] => Array
(
[a5] => Array
(
)
[a4] => Array
(
)
)
)
)
)
Но у последних блоков не нравится array, хотелось бы
Array
(
[catalogue] => Array
(
[car] => Array
(
[audi] => Array
(
[0] => a4,
[1] => a5
)
)
)
)
Можно и так оставить, но визаульно не очень, особенно если больше 100 элементов
_____________
если помог, не скупись на карму =)