2016-02-14 48 views
4

我要创建我的PHP应用程序和对事物的思想层次Enumarations像PHP枚举层次

abstract class User_Roles extends Enum { 

    const Administrator = ""; 
    const Account_Manager = "Administrator"; 
    const BlogAuthor = "Account_Manager"; 
    const CommentManager = "Account_Manager"; 

} 

我使用这个枚举级:SO

所以每个孩子都有自己的父节点为这是价值。

这是我会怎么做:

$constants = $reflector->getConstants(); 
    foreach ($constants as $key => $value) { 
     if ($value == "") { 
      $returnHierarchy[$key] = array(); 
      continue; 
     } 
     $returnHierarchy[][$value] = $key; 
    } 

但我有我要创建多维数组的一些问题。

因此,它应该是这样的:

[Administrator] 
{ 
    [Account_Manager] 
    { 
     [BlogAuthor] 
     [CommentManager] 
    } 
} 

但我结束了这样的东西:

array(4) (
    [Administrator] => array(0) 
    [0] => array(1) (
    [Administrator] => (string) Account_Manager 
) 
    [1] => array(1) (
    [Account_Manager] => (string) BlogAuthor 
) 
    [2] => array(1) (
    [Account_Manager] => (string) CommentManager 
) 
) 

有什么,我误解或忽视?

回答

1

你必须遍历$contstants和内部搜索您$returnHierarchy如果您$value的角色已经有追加,如果没有创造新的

要在数组搜索,你必须使用这将返回匹配的子数组索引参考

递归函数
// IMPORTANT: it return reference function mae mast start with & 
function &searchKeyInArray($key, &$array){ 

     $matchedArrayReffarance = null; 

     if(!isset($array[$key])){ 

      foreach ($array as &$sub){ 

       if(is_array($sub)){ 
        $matchedArrayReffarance = &searchKeyInArray($key, $sub); 
       } 
      } 
     }else{ 
      $matchedArrayReffarance = &$array; 
     } 

     return $matchedArrayReffarance; 
} 

那么简单的使用定义searchKeyInArray上面就可以实现你在找什么

$returnHierarchy = array(); 
// This is example, in your case it is: $constants = $reflector->getConstants(); 
$constants = array(
     'Administrator' => "", 
     'Account_Manager' => "Administrator", 
     'BlogAuthor' => "Account_Manager", 
     'CommentManager' => "Account_Manager", 
); 

foreach ($constants as $key => $value) { 

    $matchArray = &searchKeyInArray($value, $returnHierarchy); 

    if(isset($matchArray)){ 
     $matchArray[$value][$key] = array(); 
    }else{ 
     $returnHierarchy[$key] = array(); 
    } 
} 

var_dump($returnHierarchy); 

$returnHierarchy后续代码var_dump将

array(1) { 
    ["Administrator"]=> &array(1) { 
      ["Account_Manager"]=> array(2) { 
       ["BlogAuthor"]=> array(0) { } 
       ["CommentManager"]=> array(0) { } 
      } 
    } 
} 
+0

阿尔缅您好,谢谢您的回答。但是,您可以添加运行时获得的输出吗?当我运行它,然后我得到几乎相同的输出如问题所示。将不胜感激:) – Snickbrack

+0

嗨还好我更新了答案 – Armen

+0

谢谢,现在它像一个魅力:) – Snickbrack