0

次のように、MySQL テーブル (info と呼ばれる) にデータがあります。

_______________________
ID | テキスト | 親|
1 | | | ヌル |
2 | b | 1 |
3 | c | 1 |
4 | d | 2 |
-----------------------

(idは自動インクリメント)

次のように、このデータを PHP で表示します。

>a (ID 1)
>>b(ID2)
>>>d (ID 4、親 2)
>>c (ID 3)

さまざまな方法を試しましたが、どちらの方法でも機能させることができないようです。再帰関数が必要なのはわかっていますが、どうすればよいでしょうか? 単純なポインターで十分です。ありがとう。

4

1 に答える 1

0

あなたがテーブルを取得しているように:

$parents = array();
$children = array();
while($row = ...){
    if($row['parent'] == null){
         $parents[] = array ('id' => $row['id'], 'text' => $row['text']) 
    }
    else{
         if(!isset($children[$row['parent']])) $children[$row['parent']] = array();
         $children[$row['parent']][] = array ('id' => $row['id'], 'text' => $row['text']) 
    }
}

この関数を使用して繰り返します。

function displayChildren($array, $id, $char = ">"){
   foreach($array as $ch){
        if($ch['id']  == $id)
           echo "$char {$ch['text']} (ID {$ch['id']})"
   }
}
于 2011-06-21T19:11:43.213 に答える