2011年8月 6日

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


 ミワです。

On 2011/08/05, at 10:47, DM wrote:
>
> $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をはき出したいと思っています。


 これでどうでしょうか?

-----
$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';

define('INDENT_STR', "\t");
function writeWBSHtml($source, $parent, $depth) {
$pattern = sprintf('/(?:^|,)(%s\.[0-9]+)(?=,|$)/', preg_quote($parent));
$matches = array();
if (preg_match_all($pattern, $source, $matches)) {
printf("%s<ul>\n", str_repeat(INDENT_STR, $depth));
foreach($matches[1] as $val) {
printf("%s<li>%s\n", str_repeat(INDENT_STR, $depth+1), $val);
writeWBSHtml($source, $val, $depth+2);
printf("%s</li>\n", str_repeat(INDENT_STR, $depth+1));
}
printf("%s</ul>\n", str_repeat(INDENT_STR, $depth));
}
}

sort($arrWBS, SORT_STRING);
writeWBSHtml(implode(',', $arrWBS), $rootWBS, 0);
-----

--
 miwa at offside.ne.jp


_______________________________________________
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月 6日 22:11
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/105511
トラックバック
コメント
コメントする




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