我正在使用codeigniter,我有一种情况,我有一个用户对My_Controller.php中变量中定义的特定链接的特定权限数组。我还有一个在配置文件(application / config)中指定的多维链接数组。现在需要的是循环权限,将它们与链接数组进行比较,并打印出用户有权访问的链接,同时根据配置文件中定义的标题对链接进行分组。我设法循环,但问题是它在每个选项后显示标题,而不是打印标题一次下面的链接列表。我检查了一个类似的问题,发现解决方法是相同的,但问题出现在我必须遍历权限数组,这意味着我有三个嵌套循环而不是两个。还有三个嵌套循环的性能权衡吗?
这是预期的输出;
管理
Users
Edit Users
Reception
工具
Settings
Edit Settings
这就是我得到的;
管理
Users
管理
Edit Users
管理
Reception
工具
Settings
工具
Edit Settings
这是配置文件:
$config['nav']['manage'] = array(
'users' => 'auth_title_users',
'users/edit' => 'auth_title_users_edit',
'reception' => 'auth_title_reception'
);
$config['nav']['tools'] = array(
'settings' => 'auth_title_settings',
'settings/edit' => 'auth_title_settings_edit'
);
这是我的header.php中的代码(application / views / includes);
// $navs contains the multidimentional array of the defined links according to the config file
$navs = $this->config->item('nav', 'tank_auth');
// $menu_items is the array containing permissions the user has from the db
foreach($menu_items as $menu_item){
$val = $menu_item;
if($navs){
foreach($navs as $k => $v){
if(is_array($v)){
$header_written = FALSE;
foreach($v as $key => $value){
// compare permissions against the links
if($val == $key){
if (!$header_written){
$section_hr = lang('auth_section_'.$k);
echo "\t<h3>".$section_hr."</h3>\n";
}
$list_item = lang('auth_title_'.$key);
echo "\t<ul>\n";
echo "\t\t<li>".$list_item."</li>\n";
$header_written = TRUE;
}
}
}
else{
$header_written = FALSE;
}
if ($header_written){
echo "\t</ul>\n";
}
}
}
}
答案 0 :(得分:0)
使用in_array而不是循环用户拥有的权限,这将允许您删除最外部的foreach语句。
if ( in_array($key, $menu_items) ) # instead of if($val == $key){