2014-11-24 88 views
0

我有一個小問題,我需要一些幫助。需要將PHP嵌套樹結構轉換陣列PHP樹嵌套集多維數組

$array = { 
    array(
     'id' => 1, 
     'name' => 'john' 
     'left' => '1' 
     'right' => '4' 
    ), 
    array(
     'id' => 2, 
     'name' => 'jane' 
     'left' => '2' 
     'right' => '3' 
    ) 
} 

在TO

$array = array(
    'id' => 1, 
    'name' => 'john', 
    'childs' => array(
     array(
      'id' => 2, 
      'name' => 'jane' 
     ) 
    )   
) 

這裏的樹結構。

http://fuelphp.com/docs/packages/orm/model/nestedset.html

我需要一個像父子陣列

+3

什麼決定數組'jane'是'john'的孩子? – RichardBernards 2014-11-24 13:08:26

回答

1
If left and right keys represent indexes in $array then: 

$out = array(); 

foreach ($array as $index => $data) { 
     $storeKey = sprintf("%s_%s", $data['id'], $data['name']); 
     $keysToCopy = array('id', 'name'); 

     if(!isset($out[$storeKey])){ 
      $out[$storeKey] = array_merge(
        array_intersect_key($data, array_flip($keysToCopy)), 
        array("childs" => array()) 
       ); 
     } 

     $check = array('left', 'right'); 

     foreach ($check as $checkChild) { 
      if(isset($array[$data[$checkChild]])){ 
        $child = array_intersect_key($array[$data[$checkChild]], array_flip($keysToCopy)); 
        $out[$storeKey]['childs'][] = $child; 
      } 

     } 
} 

$out = array_values($out); 

var_dump($out); 
1

那麼,如果它僅僅是您發佈的數組:

$newArray = array(
    'id' => $oldArray[0]['id'], 
    'name' => $oldArray[0]['name'], 
    'childs' => array( 
    'id' => $oldArray[1]['id'], 
    'name' => $oldArray[1]['name'] 
    ) 
); 

如果你需要在一個循環中,你需要提供一些更多信息。正如在已經提到的評論中,什麼決定了簡是約翰的孩子?