0

質問とカテゴリの数が不明な、3層のレベルで質問を整理する必要があるクライアント向けの質問票を作成しています。データベースから情報を取得するためのUIとコードを正常に作成しましたが、すべてを適切な場所にロードする方法を見つけようとしています。データベースはクライアントによってそのように編成されているので、私はそれを制御できません。

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

そして私が今使っているコードはこれです:

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はここにあります:http://jsfiddle.net/Cyb2N/

問題は、私が思いついたすべてのアイデアで、レベルをハードコーディングする必要があり、レベル2が導入されると中断することです。誰かが私を正しい方向に押しやることができますか?ありがとう!

4

2 に答える 2

0

私があなたの質問を正しく理解していれば、クライアントのデータのparentId参照によって暗示されたレベルを解決する方法を探していますか? そのようです:

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

親レベルを参照するプロパティを持つLevelクラスを作成するのはどうですか? parent次に、クライアントのデータを反復処理して、Level インスタンスを適切なツリーに解決し、そこから必要なことを実行できます。

Levelまたは、クラスにプロパティを与えることもできchildrenます。これは、そのインスタンスを親として参照するレベルのコレクションになります... とにかく、ポイントは、クライアントのフラットデータをかなり単純なクラスで有用なツリーモデルに変換できることです. 親 (または子) を数えることで、特定のレベルがツリーのどのくらい上/下にあるかがわかります。

于 2012-06-13T02:18:09.883 に答える
0

printChildQuestions は再帰関数です。再帰のどのレベルにいるかを判断する方法がわからないようです。方法は次のとおりです。

printChildQuestions($parent_id);

function printChildQuestions($parent_id, $level = 1){
    if( $need_to_recurse ){
        printChildQuestions($new_parent, $level + 1);
    }
}
于 2012-06-13T02:18:21.623 に答える