function array_to_tree($nodes, $parent_id = 0) { $tree = array(); $position = 0; for ($i = 0, $cnt = count($nodes); $i < $cnt; $i++) { if ($nodes[$i]['superior'] == $parent_id) { $tree[$position] = $nodes[$i]; $tree[$position++]['children'] = array_to_tree($nodes, $nodes[$i]['uid']); } } return $tree; }
/** * 获取指定用户,及其权限信息 * * @param array $conditions */ function getUserWithPermissions($conditions) { $tableUsers =& FLEA::getSingleton($this->_tableClass['users']); /* @var $tableUsers FLEA_Acl_Table_Users */ $user = $tableUsers->find($conditions); if (empty($user)) { return false; } // 取得用户所在用户组的层次数据 $tableUserGroups =& FLEA::getSingleton($this->_tableClass['userGroups']); /* @var $tableUserGroups FLEA_Acl_Table_UserGroups */ $rowset = $tableUserGroups->getPath($user['group']); // 找出用户组的单一路径 FLEA::loadHelper('array'); $ret = array_to_tree($rowset, 'user_group_id', 'parent_id', 'subgroups', true); $tree =& $ret['tree']; $refs =& $ret['refs']; $groupid = $user['user_group_id']; $path = array(); while (isset($refs[$groupid])) { array_unshift($path, $refs[$groupid]); $groupid = $refs[$groupid]['parent_id']; } // 整理角色信息 $userRoles = array(); foreach ($path as $group) { $roles = $group['roles']; foreach ($roles as $role) { $roleid = $role['role_id']; if ($role['_join_is_include']) { $userRoles[$roleid] = array('role_id' => $roleid, 'name' => $role['name']); } else { unset($userRoles[$roleid]); } } } foreach ((array) $user['roles'] as $role) { $roleid = $role['role_id']; if ($role['_join_is_include']) { $userRoles[$roleid] = array('role_id' => $roleid, 'name' => $role['name']); } else { unset($userRoles[$roleid]); } } // 整理权限信息 $user['roles'] = $userRoles; return $user; }
function array_to_tree($_array, $root) { $result = array(); foreach ($_array as $key => $value) { if ($_SESSION['debug_mode']) { var_dump($key); var_dump($value); } if (!is_array($value)) { if ($_SESSION['debug_mode']) { var_dump("is Not Array!"); } if (!strpos($key, "_Main_Key")) { $cutpos = strpos($key, "_number"); $key = substr($key, 0, $cutpos); if ($root == NULL) { $result[$key] = array("root", $key, $key . "[" . $value . "]", true, "bfly.gif"); } else { $result[$key] = array($root, $key, $key . "[" . $value . "]", true, "bfly.gif"); } if ($_SESSION['debug_mode']) { var_dump($result[$key]); } } } else { if ($_SESSION['debug_mode']) { var_dump("is Array!"); } $result[$key] = array_to_tree($value, $key); } } if ($_SESSION['debug_mode']) { var_dump("Returned result!:"); var_dump($result); } return $result; }