phpのツリーのアルゴリズムがわかんねんんだよ!
∧_∧ ∧_∧
ピュ.ー ( ・3・) ( ^^ ) <これからも僕たちを応援して下さいね(^^)。
=〔~∪ ̄ ̄ ̄∪ ̄ ̄〕
= ◎――――――◎ 山崎渉&ぼるじょあ (⌒V⌒)
│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン 便乗質問、
HTMLに関する質問ですが、ツリーのアルゴリズムについてなので。。。
HTMLタグの<ul><li><li></ul>をネストして書こうと思っているのですが、
データベースを使っていたりデータベースをチューニングしてる関係などにより、
各項目について、
●上から何番目か($nとします)・・・@seq =(1,2,3,4,5,6,7,8,9,10)とし、$nには1,2,3,4,..10が入ります
●階層の深さが何階層目か($depth[$n]とします)
●項目名($name[$n]とします)
しかわかっていません。
★参考:<ul><li></li></ul>の見た目とソースの対応を、下記URLにおいておきます。
http://31.com/tmp/ul_algorithm.html
で、やりたいのはこれらの情報を使って
*上から順*にソースを書き込んでいきたいということです。
そのためのアルゴリズムがわからずに苦慮しています。
$depth[n]=$depth[n-1]のときは、
単に<li>name(n)</li>と書けばいいことは自明です
しかし、それ以外のパターンのアルゴリズムがわからず。。。
なお、アルゴリズムの考え方やそのヒントでも、phpでやperlのソースでも、
あるいは、ヒントだけでもいいので、教えていただければ幸いです。 > しかし、それ以外のパターンのアルゴリズムがわからず。。。
行頭 → <ul> * $depth[n]
$depth[n-1]-$depth[n]=1 → <ul>
$depth[n-1]-$depth[n]=2 → <ul><ul>
$depth[n-1]-$depth[n]=-1 → </ul>
行末 → </ul> * $depth[n]
単純にこれじゃダメかい? >>55さん、ありがとうございます。そうか、ulとliをいっぺんに考えてたから、混乱してました。
最初にulを考えて、そのあとliを考えたらうまくいきました。参考までにそのソース。
while ($row = pg_fetch_array($rs)) {
$n++;
$depth[$n] = $row[depth];//深さ(最小は1)
$name[$n] = $row[name];//項目名
//わかりやすく
$now_depth = $depth[$n];
$name = $name[$n];
//</li></ul>を挿入
$ul_li_insert = $before_depth - $now_depth;
if ($n >= 2) {
if ($ul_li_insert >= 0) $HTMLcattree .= "</li>\n";
for ($i=1;$i<=$ul_li_insert;$i++){
$HTMLcattree .= "</ul>\n";
$HTMLcattree .= "</li>\n";
}
}
//<ul><li>を挿入
$ul_li_insert = $now_depth - $before_depth;
for ($i=1;$i<=$ul_li_insert;$i++){
$HTMLcattree .= "<ul>\n";
}
(つづき)
$HTMLcattree .= "<li>\n";
//項目名を表示
$HTMLcattree .= $name;
//「前の項目の階層数」として使う
$before_depth = $now_depth;
}
//締めの、</li></ul>を挿入
$ul_li_insert = $before_depth;
$HTMLcattree .= "</li>\n";
for ($i=1;$i<=$ul_li_insert;$i++){
$HTMLcattree .= "</ul>\n";
$HTMLcattree .= "</li>\n";
}
$HTMLcattree .= "</ul>\n";
print $HTMLcattree;
//ありがとうございました。 ∧_∧
ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。
=〔~∪ ̄ ̄〕
= ◎――◎ 山崎渉 コンピュータサイエンスの基本として、データ構造〜とりわけツリーの扱いは基本かつ大事なんですね。 >>1
Z
z
z
<⌒/ヽ-、___
/<_/____/
 ̄ ̄ ̄ ̄ ̄ ̄ ̄
∧_∧
( ・∀・) | | ガガッ
と ) | |
Y /ノ .人
/ ) .人 < >_∧∩
_/し' < >_∧∩`Д´)/
(_フ彡 V`Д´)/ / ←>>50
/ ←>>45 誰でも簡単にネットで稼げる方法など
参考までに、
⇒ 『半藤のブブイウイウレレ』 というサイトで見ることができます。
グーグル検索⇒『半藤のブブイウイウレレ』
Z1UWE85V4W