0

嗨,我的目标是将我所有物种记录中的一棵树序列化到一个文件中。

数据库是一个自引用的表,基本上它包含所有物种和它们的分类级别。所以例如我们在下面有一个海龟记录

                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

所以要构建一棵树,我正在查询每个物种记录并通过递归方法获取每个父级,我应该如何将它们组装成树形结构?我有点迷茫,希望能在开始时提供一些帮助。谢谢你

4

1 回答 1

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;
}
于 2013-07-21T01:40:33.457 回答