如何将此数组转换为fuelphp acl格式

时间:2014-08-01 18:15:42

标签: php fuelphp

您好,我是FuelPHP的新手。我是一个使用ACL的演示版。我从数据库中获取了所有角色,格式为下面的代码

$data = array(
  array('admin'=>array(
    'none' => array(
        'crudform' => array('create','index')
      )  
  )),
  array('admin'=>array(
    'none' => array(
        'cruddept' => array('create','view')
      )  
  )),
);

现在我想将该数组转换为格式为

$data = array(
  'admin' => array(
    'none'=>array(
      'crudform' => array(
         'create',
         'index'
       ),
       'cruddept'=>array(
          'create',
          'view'
       )
     )
   )
)

我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

从数据库中检索数据后,您可以使用与此类似的函数转换数组

function change_array($data)
{
    $result = array('admin' => array('none' => array()));
    foreach ($data as $key => $value)
        foreach ($data[$key]['admin']['none'] as $key_child => $value_child)
            $result['admin']['none'][$key_child] = $value_child;
    return $result;
}

您需要做的就是像这样使用它

$data = change_array($data);

答案 1 :(得分:0)

谢谢Khalid先生,您的想法为我提供了解决方案的方法。我找到了按照自己的意愿构建数组的方法。这是我的代码

function build_role_array($roles){
        $final = array();
        foreach($roles as $row){
            foreach($row as $role=>$value){
                if(!isset($final[$role])){
                    $final[$role] = array();
                }
                foreach($value as $module=>$area){
                    if(!isset($final[$role][$module])){
                        $final[$role][$module] = array();
                    }
                    foreach($area as $controller=>$rights){
                        $final[$role][$module][$controller] = $rights;
                    }
                }
            }
        }
        return $final;
    }

感谢您的支持