2011年8月 5日

[PHP-users 35613]ツリー構造をulとli要素に変換したい

<?php

$arrWBS = array("1", "1.1", "1.1.1", "1.2",
"1.2.1","1.2.1.1","1.2.1.2","1.2.1.3","1.2.1.3.1","1.2.3", "1.3", "1.4", "1.
5","1.5.1");
$rootWBS = "1";

のような配列(配列はソートされています)と文字列があり、

それをもとに、
getWBSHtml($arrWBS,$rootWBS);関数なるものをつくり、

上の例($rootWBS = "1";)だと以下のようなHTMLをはき出したいと思っています。

<ul>
<li>1.1
<ul>
<li>1.1.1</li>
</ul>
</li>
<li>1.2
<ul>
<li>1.2.1
<ul>
<li>1.2.1.1</li>
<li>1.2.1.2</li>
<li>1.2.1.3</li>
<ul>
<li>1.2.1.3.1</li>
</ul>

</ul>
</li>
<li>1.2.3</li>
</ul>
<li>1.3</li>
<li>1.4</li>
<li>1.5
<ul>
<li>1.5.1</li>
</ul>
</li>
</li>
</ul>

===========================

そして、
$rootWBS = "1.2";だとすると、

<ul>
<li>1.2.1
<ul>
<li>1.2.1.1</li>
<li>1.2.1.2</li>
<li>1.2.1.3</li>
<ul>
<li>1.2.1.3.1</li>
</ul>

</ul>
</li>
<li>1.2.3</li>
</ul>

となるHTMLをはき出したくおもっています。
(できれば整形したかたちで)
===========================


途中まで後述のように書いたのですが、完成せず、
また、$arrWBSを必要以上に走査して無駄な気がします。

どのようにすればこういったHTMLをはき出せるのでしょうか?
よろしくお願いします。

getWBSHtml($arrWBS,$rootWBS);
function getWBSHtml($arrWBS,$rootWBS){
foreach($arrWBS as $data){
if (preg_match("/^$rootWBS\.[^.]+$/",$data) > 0) {

print "<ul>\n";
print "<li>";
print $data;
getWBSHtml($arrWBS,$data);
print "</li>\n";
print "</ul>\n";
}

}
}


?>

_______________________________________________
PHP-users mailing list PHP-users@xxxxx
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3


投稿者 xml-rpc : 2011年8月 5日 10:47
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/105509
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。