2012-06-13 2 views
0

질문과 범주가 모르는 3 단계 레이어로 질문을 구성해야하는 클라이언트를위한 설문지를 만듭니다. 나는 U.I.를 성공적으로 창조했다. 그리고 코드는 데이터베이스에서 정보를 가져 오지만 모든 것을 올바른 위치에로드하는 방법을 찾으려고 노력했습니다. 내가 어떤 관리 권한이없는 있도록 데이터베이스 클라이언트과 같이 구성되어 있습니다PHP를 사용한 재귀 적 트리 순회 - 레이아웃 문제

function printChildQuestions($parentid) { 
    $sql="SELECT * FROM pB_test WHERE parentID=$parentid"; 
    $result=mysql_query($sql); 
    $i=0; 
    while (true) { 
    $row=mysql_fetch_array($result); 
    if (!$row) break; 
    if ($row['parentId'] == 0) { 
     echo '<div class="tabs">'; 
     echo '<span class="level1">'.$row['description'].'</span>'; 
     echo '<ul id="main-nav"><h2 align="center">Categories</h2></ul>'; 
     echo '<div>'.$row['id'].'&nbsp;'.$row['description'].'&nbsp;'.$row['parentId'].'</div>'; 
     if ($row['parentId'] == 1) { 
     } 
     echo '</div>'; 
    } else { 
    echo '<div>'.$row['id'].'&nbsp;'.$row['description'].'&nbsp;'.$row['parentId'].'</div>'; 
    } 
    printChildQuestions($row['id']); 
    } 
} 

printChildQuestions(0); 

할 필요가있는 HTML을 :

id description parentId  
1  Level 1  0   
2  Level 2  0   
3  Level 1a  1 
4  Level 1b  1 
5  Level 1a1  3 

내가 지금 사용하고 코드는이입니다 에 대한 생성은 다음과 같습니다. http://jsfiddle.net/Cyb2N/

문제는 레벨 2를 도입 할 때 레벨을 하드 코딩하고 중단해야하는 모든 아이디어입니다. 누군가 나를 올바른 방향으로 밀 수 있었습니까? 감사!

답변

0

질문을 올바르게 이해하면 클라이언트 데이터의 상위 참조가 암시하는 수준을 해결할 방법을 찾고 있습니까? 그래서 같이 :

Level 1   
    Level 1a   
     Level 1a1   
    Level 1b   
Level 2   

어떻게 상위 레벨을 참조하는 parent 특성을 가진 Level 클래스를 만드는 방법에 대한? 그런 다음 클라이언트의 데이터를 반복하고, Level 인스턴스를 멋진 트리로 해석하고, 원하는 모든 작업을 수행 할 수 있습니다.

또는 Level 클래스에 children 속성을 부여 할 수 있습니다.이 속성은 해당 인스턴스를 부모로 참조하는 수준의 컬렉션입니다 ... 어쨌든 요점은 클라이언트의 플랫 데이터를 유용한 트리로 변환 할 수 있다는 것입니다 상당히 간단한 클래스의 모델입니다. 부모 (또는 자녀)를 세면 주어진 레벨이 트리에서 얼마나 멀리 위/아래로 있는지 알 수 있습니다.

+0

가능한 경우 예제 코드를 제공해 주시겠습니까? 나는 지금 당장 가지고있는 것을 다시 시도하기 위해 내 편을 다룰 것이다. 그러나 나는 이런 유형의 논리에 대한 경험이 거의 없다. –

+0

아, 잠깐,이 주제에 대해 이미 여러 가지 중복되는 질문이있는 것 같습니다. 내가 제안하는 것은 이미 [이 질문] (http://stackoverflow.com/questions/11007826/creating-an-array-using-recursive-php-from-mysql)에 대한 답변의 대안입니다. . 이 질문에서 프로젝트의 HTML 서식 부분을 공격하는 것 같습니다.이 경우 내 대답은 덜 관련됩니다. –

+0

네, 일단 접근 방식을 변경하면 새로운 질문을하기로했습니다. 그래도 도와 ​​줘서 고마워! –

0

printChildQuestions는 재귀 함수입니다. 재귀 수준을 결정하는 방법을 모르는 것 같습니다. 방법은 다음과 같습니다.

printChildQuestions($parent_id); 

function printChildQuestions($parent_id, $level = 1){ 
    if($need_to_recurse){ 
     printChildQuestions($new_parent, $level + 1); 
    } 
}