Предполагая, что пункты меню заказаны с родителями, приходящими раньше детей, вот как вы могли бы сделать это:
$menu = [];
foreach($input as $path) {
$keys = explode(" / ", key($path)); // Extract the individual menu titles
$last = array_pop($keys); // Pull the last one from it
$loc = &$menu;
foreach($keys as $key) {
// Create menu item if it does not exist yet
if (!isset($loc[$key])) $loc[$key] = [];
// When a menu gets sub-menu, move the title in index 0 of a new array
if (!is_array($loc[$key])) $loc[$key] = [$loc[$key]];
$loc = &$loc[$key]; // Set the pointer to that submenu
}
$loc[$last] = reset($path); // At the deepest level assign the menu title.
}
// Print result:
var_export($menu);
Выход:
array (
'Pages' => array (
0 => 'coreViewSites',
'Create' => 'create coreView',
'Duplicate' => 'coreViewSites',
'Anarchy' => 'coreViewSites',
),
'User' => 'coreViewUser',
)