nag_mm の回答履歴

全1件中1~1件表示
  • 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