2014-11-24 5 views
0

У меня возникла небольшая проблема. Мне нужна помощь. Необходимо преобразовать структуру PHP Уплотненного дерева в массивеPHP Tree Вложенный набор в многомерный массив

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

К

$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

ответ

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'] 
    ) 
); 

Если вам это нужно в цикле, вы должны будете предоставить некоторые больше информации. Как в уже упомянутых комментариях, что определяет, что Джейн является дочерью Джона?

Смежные вопросы