2016-05-13 4 views
0

私は人々の列があります。だから、ジョンは母親と父親を持っている子である、父親は母親と父親を持って、母親が母親を持ってアレイからバイナリツリーアレイを作成するにはどうすればよいですか?

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' => ... 
) 

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 
    ), 
); 

をそして、私はこれを取得したいです父親などと何かをするが、私が欲しいものではないスクリプトを書く

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はおそらく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

関連する問題