2017-08-30 55 views
0

我有一個像下面的樹,其中包含第n級權限。搜索數組,並找到depedent項目

  Landing Page        Footer       Archive 
       ||          ||        || 
       ||          ||        || 
Current ========== Pipeline=== BHI    Phonebook==Password Keeper  Edit==View==Delete 
    ||     || 
    Open Forms   Open Forms 
    ||     || 
    Blog Request  Blog Request 
    ||     || 
    Add == Edit   Add == Edit 

樣本陣列

$list = Array 
(
    [0] => Array 
     (
      [parent] => 0 
      [item_level] => 1 
      [id] => 1 
      [display_name] => Landing Page 
     ) 

    [1] => Array 
     (
      [parent] => 1 
      [item_level] => 2 
      [id] => 2 
      [display_name] => Current 
     ) 

    [2] => Array 
     (
      [parent] => 2 
      [item_level] => 3 
      [id] => 5 
      [display_name] => Open Forms 
     ) 

    [3] => Array 
     (
      [parent] => 5 
      [item_level] => 4 
      [id] => 9 
      [display_name] => Blog Request 
     ) 

    [4] => Array 
     (
      [parent] => 9 
      [item_level] => 5 
      [id] => 10 
      [display_name] => Add 
     ) 

    [5] => Array 
     (
      [parent] => 9 
      [item_level] => 5 
      [id] => 11 
      [display_name] => Update 
     ) 

    [6] => Array 
     (
      [parent] => 1 
      [item_level] => 2 
      [id] => 3 
      [display_name] => Pipeline 
     ) 

    [7] => Array 
     (
      [parent] => 3 
      [item_level] => 3 
      [id] => 6 
      [display_name] => Open Forms 
     ) 

    [8] => Array 
     (
      [parent] => 6 
      [item_level] => 4 
      [id] => 12 
      [display_name] => Blog Request 
     ) 

    [9] => Array 
     (
      [parent] => 12 
      [item_level] => 5 
      [id] => 13 
      [display_name] => Add 
     ) 

    [10] => Array 
     (
      [parent] => 12 
      [item_level] => 5 
      [id] => 14 
      [display_name] => Update 
     ) 

    [11] => Array 
     (
      [parent] => 1 
      [item_level] => 2 
      [id] => 4 
      [display_name] => BHI 
     ) 

    [12] => Array 
     (
      [parent] => 1 
      [item_level] => 2 
      [id] => 7 
      [display_name] => Add Property 
     ) 

    [13] => Array 
     (
      [parent] => 1 
      [item_level] => 2 
      [id] => 8 
      [display_name] => Show Child Properties 
     ) 

    [14] => Array 
     (
      [parent] => 0 
      [item_level] => 1 
      [id] => 15 
      [display_name] => Footer 
     ) 

    [15] => Array 
     (
      [parent] => 15 
      [item_level] => 2 
      [id] => 16 
      [display_name] => Phonebook 
     ) 

    [16] => Array 
     (
      [parent] => 15 
      [item_level] => 2 
      [id] => 17 
      [display_name] => Password Keeper 
     ) 

    [17] => Array 
     (
      [parent] => 0 
      [item_level] => 1 
      [id] => 18 
      [display_name] => Archive 
     ) 

    [18] => Array 
     (
      [parent] => 18 
      [item_level] => 2 
      [id] => 19 
      [display_name] => Edit 
     ) 

    [19] => Array 
     (
      [parent] => 18 
      [item_level] => 2 
      [id] => 20 
      [display_name] => View 
     ) 

    [20] => Array 
     (
      [parent] => 18 
      [item_level] => 2 
      [id] => 21 
      [display_name] => Delete 
     ) 

) 

期望輸出

//Here Key is the value of "id" attribute 
$final_output = array(
    1 => array(
       2=>array(5=>array(9=>array(10,11))), 
       3=>array(6=>array(12=>array(13,14))), 
       4,//As it doesnt have any child 
       7,//As it doesnt have any child 
       8 //As it doesnt have any child 
     ), 
    15 => array(
      16, //As it doesnt have any child 
      17 ////As it doesnt have any child 
     ), 
    18 => array(
      19, //As it doesnt have any child 
      20, ////As it doesnt have any child 
      21 ////As it doesnt have any child 
     ), 
); 

這裏,1:着陸頁,15:頁腳,18:存檔(它的 「id」 屬性)等等

上面的數組後,我將不得不做第n級循環。
喜歡:

foreach($final_output as $res) 
{ 
    if(is_array($res)) 
    { 
     //Then do something, i am not sure how this achivable 
    } 
} 

是我迄今所做的,但沒有成功。

//To find out the how manhy levels are in array 
$unique_level = array_unique(array_map(function ($i) { return $i['item_level']; }, $list)); 

$parent_data = $level_data = array(); 
foreach($list as $key=>$res) 
{ 
    if($res['parent']==0) 
    { 
     if(!array_key_exists($res['id'],$parent_data)) // First insert all unique parent at level 1 
     { 
      $parent_data[$res['id']] = $res; 
     } 
    } 

    $level_data[$res['parent']][] = array(
      'display_name' => $res['display_name'], 
      'id' => $res['id'], 
      'parent' => $res['parent'], 
    ); 
} 

準備好使用JSON

[{ 「父」: 「0」, 「item_level」: 「1」, 「ID」 爲 「1」, 「DISPLAY_NAME」:「着陸頁「},{」 親本 「:」 1" , 「item_level」: 「2」, 「ID」: 「2」, 「DISPLAY_NAME」: 「當前」},{ 「父」: 「2」, 「item_level」: 「3」,「id」:「5」,「display_name」:「打開表單」},{「parent」:「5」,「item_level」:「4」,「id」:「9」 :「Blog Request」},{「parent」:「9」,「item_level」:「5」,「id」:「10」,「display_name」:「Add」},{「parent」:「9」, 「item_level」: 「5」, 「ID」: 「11」, 「DISPLAY_NAME」: 「更新」},{ 「親本」: 「1」, 「item_level」: 「2」, 「ID」: 「3」, 「display_name」:「Pipeline」},{「parent」:「3」,「item_level」:「3」,「id」:「6」,「display_name」:「Open Forms」},{「parent」:「 6" , 「item_level」: 「4」, 「ID」: 「12」,「DISPLA y_name「:」Blog Request「},{」parent「:」12「,」item_level「:」5「,」id「:」13「,」display_name「:」Add「},{」parent「:」12 「 」item_level「: 」5「, 」ID「: 」14「, 」DISPLAY_NAME「: 」更新「},{ 」親本「: 」1「, 」item_level「: 」2「, 」ID「:」 4 「,」display_name「:」BHI「},{」parent「:」1「,」item_level「:」2「,」id「:」7「,」display_name「:」添加屬性「}, :「1」,「item_level」:「2」,「id」:「8」,「display_name」:「顯示子屬性」},{「parent」:「0」,「item_level」:「1」 ID 「:」 15" , 「DISPLAY_NAME」: 「頁腳」},{ 「父」: 「15」, 「item_level」: 「2」, 「ID」: 「16」, 「DISPLAY_NAME」: 「電話簿」}, {「parent」:「15」,「item_level」:「2」,「id」:「17」,「display_name」:「密碼管理器」},{「parent」:「0」,「item_level」:「1 「 」ID「: 」18「, 」DISPLAY_NAME「: 」歸檔「},{ 」父「: 」18「, 」item_level「: 」2「, 」ID「: 」19「, 」DISPLAY_NAME「:」 編輯「},{」 父 「:」 18" , 「item_level」: 「2」, 「ID」: 「20」, 「DISPLAY_NAME」: 「查看」},{ 「父」: 「18」, 「item_level」: 「2」,「id」:「21」,「display_name」:「刪除」}]

回答

1

我得最近的是...

$list = json_decode($data, true); 
$baseList = array_combine(array_column($list,'id'), $list); 
$hierarchy = []; 

foreach ($baseList as $newItem) { 
    $parent = $newItem['parent']; 
    $hierarchy[$parent][] = $newItem['id']; 
} 
function buildTree ($startNode, $hierarchy) { 
    $newLevel = []; 
    foreach ($startNode as $children) { 
     if (isset($hierarchy[$children])) { 
      $newLevel[$children] = buildTree($hierarchy[$children], $hierarchy); 
     } 
     else { 
      $newLevel[$children] = $children; 
     } 
    } 
    return $newLevel; 
} 
$finalOutput = buildTree ($hierarchy[0], $hierarchy); 
print_r($finalOutput); 

你的問題是,你有相同的元素......

1 => array(
      2=>array(5=>array(9=>array(10,11))), 
      3=>array(6=>array(12=>array(13,14))), 
      4,//As it doesnt have any child 
      7,//As it doesnt have any child 
      8 //As it doesnt have any child 
    ), 

正如你幾乎有元素4,7和8沒有一個鍵 - 數組中的所有元素都有一個鍵,這是行不通的。

,我所做的就是輸出...

Array 
(
    [1] => Array 
     (
      [2] => Array 
       (
        [5] => Array 
         (
          [9] => Array 
           (
            [10] => 10 
            [11] => 11 
           ) 

         ) 

       ) 

      [3] => Array 
       (
        [6] => Array 
         (
          [12] => Array 
           (
            [13] => 13 
            [14] => 14 
           ) 

         ) 

       ) 

      [4] => 4 
      [7] => 7 
      [8] => 8 
     ) 

    [15] => Array 
     (
      [16] => 16 
      [17] => 17 
     ) 

    [18] => Array 
      [19] => 19 
      [20] => 20 
      [21] => 21 
     ) 

)  [19] => 19 
      [20] => 20 
      [21] => 21 
     ) 

) 

正如你所看到的,具有的4

+0

值元件4謝謝你這麼多它像一個魅力的工作。 – DS9

+0

很高興能夠提供幫助。你能標記爲答案,謝謝:) –

0
 $list = Array 
     (
     0 => Array 
      (
       'parent' => 0, 
       'item_level' => 1, 
       'id' => 1, 
       'display_name' => 'Landing Page' 
      ), 

     1 => Array 
      (
       'parent' => 1, 
       'item_level' => 2, 
       'id' => 2, 
       'display_name' => 'Current' 
      ), 

     2 => Array 
      (
       'parent' => 2, 
       'item_level' => 3, 
       'id' => 5, 
       'display_name' => 'Open Forms' 
      ), 

     3 => Array 
      (
       'parent' => 5, 
       'item_level' => 4, 
       'id' => 9, 
       'display_name' => 'Blog Request' 
      ), 

     4 => Array 
      (
       'parent' => 9, 
       'item_level' => 5, 
       'id' => 10, 
       'display_name' => 'Add' 
      ), 

     5 => Array 
      (
       'parent' => 9, 
       'item_level' => 5, 
       'id' => 11, 
       'display_name' => 'Update' 
      ), 

     6 => Array 
      (
       'parent' => 1, 
       'item_level' => 2, 
       'id' => 3, 
       'display_name' => 'Pipeline' 
      ), 

     7 => Array 
      (
       'parent' => 3, 
       'item_level' => 3, 
       'id' => 6, 
       'display_name' => 'Open Forms' 
      ), 

     8 => Array 
      (
       'parent' => 6, 
       'item_level' => 4, 
       'id' => 12, 
       'display_name' => 'Blog Request' 
      ), 

     9 => Array 
      (
       'parent' => 12, 
       'item_level' => 5, 
       'id' => 13, 
       'display_name' => 'Add' 
      ), 

     10 => Array 
      (
       'parent' => 12, 
       'item_level' => 5, 
       'id' => 14, 
       'display_name' => 'Update' 
      ), 

     11 => Array 
      (
       'parent' => 1, 
       'item_level' => 2, 
       'id' => 4, 
       'display_name' => 'BHI' 
      ), 

     12 => Array 
      (
       'parent' => 1, 
       'item_level' => 2, 
       'id' => 7, 
       'display_name' => 'Add Property' 
      ), 

     13 => Array 
      (
       'parent' => 1, 
       'item_level' => 2, 
       'id' => 8, 
       'display_name' => 'Show Child Properties' 
      ), 

     14 => Array 
      (
       'parent' => 0, 
       'item_level' => 1, 
       'id' => 15, 
       'display_name' => 'Footer' 
      ), 

     15 => Array 
      (
       'parent' => 15, 
       'item_level' => 2, 
       'id' => 16, 
       'display_name' => 'Phonebook' 
      ), 

     16 => Array 
      (
       'parent' => 15, 
       'item_level' => 2, 
       'id' => 17, 
       'display_name' => 'Password Keeper' 
      ), 

     17 => Array 
      (
       'parent' => 0, 
       'item_level' => 1, 
       'id' => 18, 
       'display_name' => 'Archive' 
      ), 

     18 => Array 
      (
       'parent' => 18, 
       'item_level' => 2, 
       'id' => 19, 
       'display_name' => 'Edit' 
      ), 

     19 => Array 
      (
       'parent' => 18, 
       'item_level' => 2, 
       'id' => 20, 
       'display_name' => 'View' 
      ), 

     20 => Array 
      (
       'parent' => 18, 
       'item_level' => 2, 
       'id' => 21, 
       'display_name' => 'Delete' 
      ), 

    ); 

嗨,試試這個代碼:

$results=array(); 
    $parent1='';$parent=$parent2=''; 
    foreach ($list as $key => $value) { 
    if($value['parent']==0) 
    { 
    $results[$value['id']]=$value; 
    $id=$value["id"]; 

    } 
    if($id==$value['parent']&&$id!="") 
    { 
    $results[$id][$value['id']]=$value; 
    $parent=$value['id']; 
    } 

    if($parent==$value['parent']&&$parent!="") 
    { 

    $results[$id][$parent][$value['id']]=$value; 
    $parent1=$value['id']; 

    } 
    if($parent1==$value['parent']&&$parent1!="") 
    { 

    $results[$id][$parent][$parent1][$value['id']]=$value; 
    $parent2=$value['id']; 
    } 

    if($parent2==$value['parent']&&$parent2!="") 
    { 

    $results[$id][$parent][$parent1][$parent2][$value['id']]=$value; 
    $parent3=$value['id']; 
    } 

    } 
    echo '<pre>'; 
    print_r($results); 
    echo '</pre>'; 
相關問題