phpで会社構造図(ツリー構造)を実装する方法
皆さんこんにちは
phpを使ってツリー構造図を実装したいのですが、実装方法が分かりません。
あなたのご意見やアイデアをお聞かせください。サンプルコードやソースコードを添付していただけるとより良いです! !
よろしくお願いします。
-----解決策--------------------------------
二分木を使用してツリーを表現します。完了後に表示されます
------解決策----------------------
この木は何ですか?
上の場合レベルは一意です。無限レベル、つまり無限ツリーを使用してください。再帰的に走査するだけです。
上位レベルが一意でない場合、複雑になります。
------解決策---------
率直に言えば、n 個の要素が与えられた場合、要素間の関係(複数の関係を一つの関係にマッピングすることも可能)、
はどのような構造であっても、上位がユニークであってもなくても、紙にペンで描ける構造であれば、 ,
グラフは行列に格納できます。
データ構造に関する書籍を探して参照することもできます。グラフ理論の関連する章、特にストレージ、作成、トラバース。
------解決策---------
テーブル構造
id
companyName
parentid
このようなテーブル構造によりバイナリツリーの格納を実現できます。
トラバーサルに関しては、将来の手間を省くために、親ノードの子ノードをすべて取り出してキャッシュファイルに保存します。保存については、良いアイデアがありません。このような配列 array('id' =>$id,'name'=>$companyName,'children'=>array($child1id,$child2id)) 後で取得するときに、すべてを簡単に取得できます親ノードの子ノード。ノードが葉ノードであるかどうかを判断する方法については、そのノードが配置されている配列の子要素が空かどうかを判断するだけで済みます。
------解決策---------
//データベースレコード $result[0] = array('id'=>1,'pid'=>0,'name'=>'会社 1',); $result[1] = array('id'=>2,'pid'=>0,'name'=>'会社 2'); $result[2] = array('id'=>3,'pid'=>2,'name'=>'会社 2 の子会社 1'); $result[3] = array('id'=>4,'pid'=>1,'name'=>'会社 1 の子会社 1'); $result[4] = array('id'=>5,'pid'=>2,'name'=>'会社 2 の子会社 2'); $result[5] = array('id'=>6,'pid'=>3,'name'=>'会社 2 の子会社 1 の子会社 1'); $result[6] = array('id'=>7,'pid'=>3,'name'=>'会社2の子会社1と子会社2'); // 単純なクラス クラスツリー { 関数ツリー($rs,$idName,$pidName,$nodeName) { $this->idName = $idName; $this->nodeName = $nodeName; $tree = 配列(); foreach((配列)$rs as $k=>$v) { $tree[$v[$pidName]][] = $v; } $this->treeArray = $tree; } 関数 showTree($root,$deep) { if( $this->treeArray[$root] ) { foreach($this->treeArray[$root] as $k=>$v) { $t = $v[$this->idName]; $str = str_repeat(" ",$deep*4)."|-".str_repeat("-",$deep); $html .="{$str}{$v[$this->ノード名]}<br/>"; if($this->treeArray[$t] ) { $gx = $ディープ + 1; $html .= $this->showTree( $t,$gx ); } } } $html を返します。 } } $tree = 新しいツリー($result,'id','pid','name'); echo $tree->showTree(0,0); <br><font color="#e78608">------解決策---------</font><br>