2015-12-05 3 views
0

У меня есть некоторые данные о базе данных MySQL, представляющей древовидную структуру, и я хочу преобразовать ее в JSON. Я использовал рекурсивную функцию для чтения всех данных, но я понятия не имею, как преобразовать в массив.Создайте многомерный массив из дерева

Вот рекурсивная функция:

public function buildTree($parent, $level) { 

    // retrieve all children of $parent 
    $results = Department::all()->where('parent_id',$parent); 
    // display each child 

    foreach($results as $result) 
    { 

     echo $this->buildTree($result['id'], $level+1); 
    } 

} 

И следующий результат JSON я хотел бы иметь в конце:

[ 
    { 
     "id":1, 
     "text":"Root node", 
     "children":[ 
      { 
       "id":2, 
       "text":"Child node 1", 
       "children":[ 
        { 
         "id":4, 
         "text":"hello world", 
         "children":[{"id":5,"text":"hello world2"}] 
        } 
       ] 
      }, 
      { 
       "id":3, 
       "text":"Child node 2" 
      } 
     ] 
    } 
] 

Here is the sample data

ответ

2
public function buildTree($parent, $level) { 
    // The array which will be converted to JSON at the end. 
    $json_return = array(); 

    // Get the current element's data. 
    $results = Department::all()->where('id',$parent); 
    $json_return['id'] = $parent; 
    $json_return['text'] = $results[0]['text']; // Or however you access the "text" parameter of the end JSON from the database. 

    // Retrieve all children of $parent 
    $results = Department::all()->where('parent_id',$parent); 

    if (count($results) > 0) 
    { 
     $json_return['children'] = array(); 
     foreach($results as $result) 
     { 
      $json_return['children'][] = $this->buildTree($result['id'], $level+1); 
     } 
    } 
    // Going to assume that $level by default is 0 
    if ($level == 0) 
    { 
     echo json_encode(array($json_return)); 
    } 
    return $json_return; 
} 
+0

теперь я может отображать данные в формате json с помощью предлагаемого кода. Большое спасибо! –

+0

Рад, что это помогло вам! Если это решило проблему, вы должны отметить ответ как «принятый» :) – Howl

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