2012-07-13 119 views
0

我有用戶的數組,每個用戶都可以有父母:如何在PHP中創建樹視圖?

array(6) { 
    guest => NULL 
    moderator => NULL 
    member => array(1) [ //username 
     0 => "guest" (5) //parent 
    ] 
    user => array(1) [ 
     0 => "member" (6) 
    ] 
    admin => array(1) [ 
     0 => "moderator" (9) 
    ] 
} 

而且我要讓從這個數據樹視圖。結果應該是這樣的:http://www.phorum.org/phorum5/file.php/62/3237/treeview_lightweight_admin_screenshot.jpg

結果將是:

- guest 
    - member 
     - user 

- moderator 
    - admin 

編輯:

我試着寫樹生成器,但我不知道如何使用遞歸。

private function generateTree($node) 
{ 
    $return = array(); 
    if(is_array($node)) 
    { 
     foreach($node as $user => $parents) 
     { 
      if(is_null($parents)) 
      { 
       $return[$user] = null; 
      } 
      if(is_array($parents)) 
      { 
       foreach($parents as $parent) 
       { 
        if(array_key_exists($parent, $return)) 
        { 
         $return[$parent] = $user; 
        } 
        else 
        { 
         dump($user, $parent); 
        } 
       } 
      } 
     } 
    } 
    return $return; 
} 

回報:

array(2) { 
    guest => "member" (6) 
    moderator => "admin" (5) 
} 

左:

user => array(1) [ 
     0 => "member" (6) 
    ] 
+0

你幾乎已經描述了該怎麼做:打印出數組recursevly並添加CSS樣式。 – Peon 2012-07-13 13:04:06

回答

0

如果你想調試你有var_dump($array)(對於HTML渲染)或print_r($array)(純文本渲染)一些自動的看法。 對於自定義視圖,您必須循環訪問陣列並編寫自己的HTML

+0

我想製作自定義視圖,但如果樹的深度不止一個,我不知道如何製作它。 – user1518183 2012-07-13 13:05:32

1

您可以通過製作HTML構建器方法recursive來激活此功能。實質上,該方法使用增量級別變量(級別1,2,3,4 ...)自行調用,直到達到最終級別。每個級別都對HTML代碼有貢獻,具體取決於級別。一個典型的例子是:

function render($treeData, &$html, $level = 0) { 
    foreach ($treeData->branches as $branch) { 
     render($branch, $level + 1); 
    } 

    $html .= '<div class="section-level-'.$level.'">'.$treeData->currentLevelData.'</div>'; 
} 

$html = ''; 
render($treeData, $html); 

這當然是僞代碼。 :)