2015-01-06 151 views
1

我在这个结构中包含一个包含用户元素的数组,每个用户都可以与另一个用户相关。
我只想制作一棵树,每个用户都包含其子用户,像树一样是阵列重构为树状结构

Array 
(
[0] => Array 
    (
     [username] => user1 
     [parent_user] => null 
    ) 

[1] => Array 
    (
     [username] => user2 
     [parent_user] => user1 
    ) 

[2] => Array 
    (
     [username] => user3 
     [parent_user] => user2 
    ) 

[3] => Array 
    (
     [username] => user4 
     [parent_user] => user3 
    ) 

[4] => Array 
    (
     [username] => user5 
     [parent_user] => null 
    ) 

这里USER4在用户3的用户,用户3包含其在用户2的用户的用户,用户2包含其在用户1的用户和USER5用户在用户1用户

期望结构是象

array(
[username] => user1 
[users] => array(
      [0] => array(
        username => user5 
        users => array() 
       ) 
      [1] => array(
        username => user2 
        users => array(
          [0] => array(
            username => user3 
            users => array(
              [0] => array(
                [0] => array(
                 username => user4 
                 users => array() 
                 ) 
               ) 
              ) 
           ) 
          ) 
        ) 
      ) 
) 
+0

请也写阵列的你的愿望输出。 –

+0

并提供你已经试过的东西 – Ziumin

+0

@ShaifulIslam我做过 –

回答

0

试试这个

function get_child($parent,$users)//a function for recursive call 
{ 
    $child=array(); 
    foreach($users as $user) 
    { 
     if($user['parent_user']==$parent) 
     { 
      $child[]=array("username"=>$user['username']); 
     } 
    } 
    if(sizeof($child)>0) 
    { 
     foreach($child as &$c) 
     { 
      $c['users']=get_child($c['username'],$users); 
     } 
    } 
    return $child; 
} 

现在写下面的代码

//$users //lets assume your main array name $users 

    $root_user=array(); 
    foreach($users as $user) 
    { 
     if($user['parent_user']==null) 
     { 
      $root_user[]=array("username"=>$user['username']); 
     } 
    } 

    foreach($root_user as &$user) 
    { 
     $user['users']=get_child($user['username'],$users); 
    } 

    print_r($root_user);//now print out the root_user which contains your desired result 

即使你能做到这一点简单的使用下面的代码

$root_user=get_child(null,$users); 
print_r($root_user);