nag_mm の回答履歴
- PHP:ツリー構造をulとli要素に変換したい
以下、タブは全角半角4つに変換しています。 <?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
- goo_mygwdisk_1
- 回答数4