2016-05-13 87 views
0

我的人的数组:如何从数组中创建二叉树数组?

array(
    array(
     'name' => 'John', 
     'id' => 1, 
     'mother_id' => 2, 
     'father_id' => 3 
    ), 
    array(
     'name' => 'Lucy', 
     'id' => 2, 
     'mother_id' => 5, 
     'father_id' => 4 
    ), 
    array(
     'name' => 'Jim', 
     'id' => 3, 
     'mother_id' => 7, 
     'father_id' => 9 
    ), 
    array(
     'name' => 'Paul', 
     'id' => 4, 
     'mother_id' => 534, 
     'father_id' => 54 
    ), 
    array(
     'name' => 'Laura', 
     'id' => 5, 
     'mother_id' => 554, 
     'father_id' => 51 
    ), 
    array(
     'name' => 'Vanessa', 
     'id' => 7, 
     'mother_id' => 5354, 
     'father_id' => 514 
    ), 
    array(
     'name' => 'Adam', 
     'id' => 9, 
     'mother_id' => 245354, 
     'father_id' => 514234 
    ), 
); 

,我想这一点:

array(
array(
    'person' => array(
     'name' => 'John', 
     'id' => 1, 
     'mother_id' => 2, 
     'father_id' => 3 
    ), 
    'parents' => array(
     'mother' => array(
       'person' => array(
        'name' => 'Lucy', 
        'id' => 2, 
        'mother_id' => 5, 
        'father_id' => 4 
      ), 
       'parents' => array(
        'mother' => array(
         'person' => array(
          'name' => 'Laura', 
          'id' => 5, 
          'mother_id' => 554, 
          'father_id' => 51 
        ), 
         'parents' => array(...) 
       ), 
        'father' => array(
         'person' => array(
          'name' => 'Paul', 
          'id' => 4, 
          'mother_id' => 534, 
          'father_id' => 54 
         ), 
         'parents' => array(...) 
        ), 
      ) 
     ), 
     'father' => ... 
) 

因此,约翰是有母亲和父亲小时候,父亲母亲和父亲,母亲有母亲和父亲等方面,编写一个脚本,做一些事情,但不是我想要什么

function parseTree(& $tree, $root = null) { 
    $return = null; 

    foreach ($tree as $key=> $item){ 

     if ($item['id'] == $root){ 

      $return = [ 
       'person' => $item, 
       'parents' => [ 
        'father' => parseTree($tree, $item['father_id']) 
       ] 
      ]; 

      unset ($tree[$key]); 
     }elseif($item['id'] == $root){ 
      $return = [ 
       'person' => $item, 
       'parents' => [ 
        'father' => parseTree($tree, $item['mother_id']) 
       ] 
      ]; 

      unset ($tree[$key]); 
     } 
     elseif ($root == null) { 

      $return = [ 
       'person' => $item, 
       'parents' => [ 
        'father' => parseTree($tree, $item['father_id']), 
        'mother' => parseTree($tree, $item['mother_id']) 
       ] 
      ]; 

      unset ($tree[$key]); 
     } 
    } 
    return $return; 
} 

我怎样才能使它发挥作用?或者也许有一些适当的库?

+0

这些MySQL数据库结果? – CodeGodie

+0

不,它来自neo4j – Roman

+0

Theres可能是一种创建Query的方法,它可以通过Neo4j为你做到这一点。首先找到它,因为在数据库级别执行它是有意义的。如果你确定你不能这样做,那么你可以看看PHP。 – CodeGodie

回答

0

你已经差不多了。我会这样做:

function parseTree(&$tree, $root = null) 
{ 
    $return = null; 
    foreach ($tree as $key => $item) { 
     if ($root == null || $item['id'] == $root) { 
      $return = [ 
       'person' => $item, 
       'parents' => [ 
        'father' => parseTree($tree, $item['father_id']), 
        'mother' => parseTree($tree, $item['mother_id']) 
       ] 
      ]; 
      unset ($tree[$key]); 
     } 
    } 
    return $return; 
} 
+1

男人,你我的英雄!非常感谢!这是完美的 :) – Roman