Php 如何根据正在调用的当前控制器(可能使用CMap)来管理Yii菜单项?

Php 如何根据正在调用的当前控制器(可能使用CMap)来管理Yii菜单项?,php,multidimensional-array,yii,array-merge,Php,Multidimensional Array,Yii,Array Merge,我有这样一个主菜单: $main= array( array('label'=>'Main Menu'), array('label'=>'Posts', 'icon'=>'list', 'url'=>array('post/index') ), '--', array('label'=>'Comments', 'icon'=>'comment', 'url'=>array('comment/index')), );

我有这样一个主菜单:

$main= array(
   array('label'=>'Main Menu'),
   array('label'=>'Posts', 'icon'=>'list', 'url'=>array('post/index') ),
    '--',   
   array('label'=>'Comments', 'icon'=>'comment', 'url'=>array('comment/index')),
  );
在Posts控制器中,我在Posts中构建一个子菜单,例如

 $submenu= array(
    array('label'=>'All Posts', 'icon'=>'list-alt', 'url'=>array("post/index")),
    array('label'=>'Create Post', 'icon'=>'plus', 'url'=>array("post/create")),
        );
我有一个函数,可以根据

来自$main数组的url
'url'=>数组('post/index')

e、 g

输出:

$main= array(
   array('label'=>'Main Menu'),
   array('label'=>'Posts', 'icon'=>'list', 'url'=>array('post/index'), 
     'items'=>array(
         array('label'=>'All Posts', 'icon'=>'list-alt', 'url'=>array("post/index")),
         array('label'=>'Create Post', 'icon'=>'plus', 'url'=>array("post/create")),
       );
     ),
    '--',   
   array('label'=>'Comments', 'icon'=>'comment', 'url'=>array('comment/index')),
  );
因此,我们的想法是在运行时除了主菜单项之外插入子菜单$菜单是全球性的, 而$子菜单是在控制器中定义的

我不确定这是不是最好的办法

有没有更好的方法或者Yii提供一些内置类来有条件地合并数组

我检查了CMap类,但没有提供任何此类功能

您建议如何改进这段代码


关于

我之所以选择它,是因为没有命名键,它不是一个关联数组,而是一个普通数组,因此任何数组合并只会附加新项。

你说得对,最外层的数组是非关联的。我只是想知道最好的解决方案,例如使用class、lib等。根据用户体验,最好的解决方案是根本不根据请求修改导航,而是有两个单独的导航,如站点(或常规导航)和上下文导航。
$main= array(
   array('label'=>'Main Menu'),
   array('label'=>'Posts', 'icon'=>'list', 'url'=>array('post/index'), 
     'items'=>array(
         array('label'=>'All Posts', 'icon'=>'list-alt', 'url'=>array("post/index")),
         array('label'=>'Create Post', 'icon'=>'plus', 'url'=>array("post/create")),
       );
     ),
    '--',   
   array('label'=>'Comments', 'icon'=>'comment', 'url'=>array('comment/index')),
  );