簡體   English   中英

數組重組為樹結構

[英]array restructure to tree structure

我在此結構中有一個包含用戶元素的數組,每個用戶都可以與另一個用戶相關。
我只想創建一個用戶樹,每個用戶都包含其子用戶, 就像一棵樹一樣。

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在user3用戶中,user3在user2用戶中包含其用戶,user2在user1用戶中包含其用戶,在user1用戶中包含user5

所需的結構像

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()
                                                         )
                                                  )
                                           )
                                  )
                            )
                    )
             )
  )

嘗試這個

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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM