2013-07-21 53 views
0

您好我的目標是序列化一個樹從我所有的物種記錄到一個文件。在php中序列化一棵樹問題

數據庫是一個自引用的表,基本上它包含了它們的所有物種和分類級別。因此,例如,我們有以下

   Taxonomic_units Table 
       ------------------------ 
      Tsn_id name parent_id rank_id 

      123  turtle 210  220 
      210  turtle_genius 893 210 
      893  turtle_family 323 200 
      323  turtle_order 242 190 
      242  turtle_class 555 180 
      555  turtle_phylum 888 170 
      888  animal_kingdom 0 0 

龜記錄,以便建立一棵樹,我查詢每一個物種的記錄,並通過遞歸方法,我應該怎麼組裝它們以樹狀結構讓每一位家長?我有點失落,並希望在入門的一些幫助。謝謝

+0

只標記您訪問的每個節點('mark [$ node] = TRUE;')並且不要再次檢查標記的節點。 – Random

+0

此代碼可以幫助您構建樹:http://stackoverflow.com/a/17621885/1744633 – Random

回答

0

您可以在數組或對象中構建樹。你的選擇。我使用數組。我假設你有一個函數get_row($id)回報這樣的事情...

array("Tsn_id" => 123, 
     "name" => "turtle", 
     "parent_id" => 210, 
     "rank_id" => 220); 

我假設你有一個函數get_parent($id)get_children($id)的是,分別取父行(作爲關聯數組)和兒童(作爲關聯數組的數組)。

然後,你可以做這樣的事情...... build_tree($id)可能是你想要的,但我已經包含了一些可能有所幫助的其他功能。

// determine the root row for any node in the tree 
function get_root($id) { 
    if (!get_parent($id)) 
    return get_row($id); 

    $last = array("Tsn_id" => $id); 
    while ($node = get_parent($last["Tsn_id"])) 
    $last = $node; 

    return $last; 
} 

// if you're trying to build the tree from a leaf node, grab the root first... 
function build_tree_from_leaf($id) { 
    $root = get_root($id); 
    return build_tree($root["Tsn_id"]); 
} 

// build a tree from the given node 
function build_tree($id) { 
    $node = get_row($id); 
    $node["children"] = array(); 
    $children = get_children($id); 
    foreach ($children as $child) { 
    $subtree = build_tree($child["Tsn_id"]); 
    $node["children"][] = $subtree; 
    } 

    return $node; 
}