2010-02-19 8 views
0

정말 누군가가 도와 줄 수 있기를 바랍니다. 나는 지금 이틀 동안 그것을 고민하고있다 ...DB에서 다차원 배열 만들기

나는 DB 테이블 "장치"와 테이블 "연결"을 가지고있다. 회사의 네트워크를 시각화하는 데 사용하고 있습니다.

Array 
(
    [id] => 1 
    [name] => TestPC1 
    [children] => Array 
     (
      [0] => Array 
       (
        [id] => 2 
        [name] => Testhub 2 
        [data] => Array 
         (
         ) 

        [children] => Array 
         (
          [0] => Array 
           (
            [id] => 3 
            [name] => Rack3 
            [data] => Array 
             (
             ) 

            [children] => Array 
             (
             ) 

           ) 

          [1] => Array 
           (
            [id] => 4 
            [name] => Rack4 
            [data] => Array 
             (
             ) 

            [children] => Array 
             (
             ) 

           ) 

         ) 

       ) 

     ) 

) 

있어서 테이블은 다음과 같다 :

A  |  B 
------------------- 
1  |  2 
2  |  3 
2  |  4 

예 시각화 보이는 I 데이터를 시각화하기 위해 사용하는 JS 프레임 워크로 데이터를 전달하는이 같은 배열을 필요 같은 :

http://img34.imageshack.us/img34/4230/netmd.jpg

사람이 아이디어를 가지고 있는가, 어떻게 배열에 DB 데이터에서 얻을 수 있습니까?

감사합니다.

답변

0

예를 들어 그 테이블을 사용하여 PHP에서 처리하려고한다고 가정 해 봅시다. 주어진 테이블과 ID-> 이름 매핑 사이에 JOIN 후에 반환 된 데이터베이스 데이터를 나타 내기 위해 배열을 사용합니다 테이블 :

$links = array(
    array('A' => 1, 'AName' => 'TestPC1', 'B' => 2, 'BName' => 'TestHub2'), 
    array('A' => 2, 'AName' => 'TestHub2', 'B' => 3, 'BName' => 'Rack3'), 
    array('A' => 2, 'AName' => 'TestHub2', 'B' => 4, 'BName' => 'Rack4') 
); 

$elements = array(); 

// Build the tree 
foreach ($links as $link) { 
    if (!isset($elements[$link['A']])) { 
     $elements[$link['A']] = array(
      'id' => $link['A'], 'name' => $link['AName'], 
      'data' => array(), 'children' => array() 
     ); 
    } 
    if (!isset($elements[$link['B']])) { 
     $elements[$link['B']] = array(
      'id' => $link['B'], 'name' => $link['BName'], 
      'data' => array(), 'children' => array() 
     ); 
    } 
    $elements[$link['A']]['children'][$link['B']] = &$elements[$link['B']]; 
} 

// Patch up the indices to start from 0 
foreach ($elements as &$element) { 
    $element['children'] = array_values($element['children']); 
} 

$elements = array_values($elements); 

는 개인적으로 내가 인덱스를 패치 귀찮게하지 것, 그것은 쉽게 그렇게하지 나중에 경우 ID로 항목을 검색 할 것입니다.

부모/자식 데이터를 입력 할 때 조심하거나 아름다운 순환 참조로 마무리해야합니다.

물론 $links에 대한 참조를 배열을 생성하는 적절한 db 명령 (mysql_fetch_array 등)으로 바꿔야합니다.

+0

당신은 신입니다. 고마워요! – user276289

0

"이 트리와 RDBMS에서 나무를 나타내는 법"을 찾아 보시기 바랍니다.

시작 here, 어쩌면.

관리해야하는 "트리"수와 계층 구조의 최대 깊이에 따라 다양한 접근 방식이 가능할 수도 있고 적을 수도 있습니다.