2010年12月29日水曜日

組織やグループ等の階層構造をDBから読み込み表示する例

組織、グループ、カテゴリ等、階層構造を持っているデータをデータベースから読み込み、HTMLで表示するPHPのサンプルです。
意外と頭を悩ませたので、覚書として残しておきます。
ネットを探しても、クエリをその都度発行して表示する例はありましたが、何度もクエリを発行するのは避けたかったので、配列に一回読み込ませたものを表示するようにしております。

サンプルソースは、組織の階層構造を表示する例です。

DBには、以下3つのフィールドがあります。

code:組織のコード
parent:組織の親コード
section_name:部門の名称

サンプルソース
・SQLにて階層構造のデータを読み込み
・配列に格納
・配列から階層構造を吐き出し

<?php
db_connect();
$result = mysql_query($sql);
db_close();

while($result_array = mysql_fetch_array($result)){
$parent_code[$result_array['parent']][] = array($result_array['code'] => $result_array['section_name']);
}
mysql_free_result($result);

function display_tree($parent,$level){
global $parent_code,$html;
if(is_array($parent_code[$parent])){
foreach($parent_code[$parent] as $section){
foreach($section as $code => $section_name){
if($code <> $parent and $code <> 0){
$html .= str_repeat('  ',$level).$section_name.'
'."\n";
display_tree($code,$level+1);
}
}
}
}
}

display_tree(0,0);
echo $html;
?>

0 件のコメント: