当前位置:首页> PHP教程> PHP代码
关键字
文章内容
PHP树的代码,可以嵌套任意层
 
 
修改时间:[2011/05/31 16:04]    阅读次数:[1236]    发表者:[起缘]
 
$cursor_tree=ora_open($handle);                     file://建立树专用游标

  $num=0;                                             file://保存游标数值变量

  ora_commiton($handle);                              file://自动开启oracle的提交

?>







<?

file
://建立树的主要函数,传递的参数为根节点的编号和根节点的标题

function create_tree($rootid,$roottilte){

  print_parent_from_rootsortid($rootid,$roottilte);

}

file://打印根节点div头的函数

function print_parent_from_rootsortid($rootid,$roottilte){

  $parent_fullname="R".$rootid."Parent";                      file://div 父级区别标志

  $parent_id="R".$rootid;

  $parent_pic="R".$rootid."img";

  echo "

      <DIV class=parent id=$parent_fullname><A

      href=\"http://www.csdn.net/expert/menu.shtm#\"

      onclick=\"expandIt('$parent_id'); return false\"><IMG border=0 height=13 id=$parent_pic

      src=\"image/folderclosed000.gif\" width=19>$roottilte</A></DIV>";



  global $cursor_tree;

  $Bottom_Flag=0;

  $len=strlen($rootid)+2;      file://子级编码为父级编码长度加2

  $query = "SELECT ResourceSortNo,ResourceSortName,SectionBottomFlag

            From TbSort

            Where length(ResourceSortNo)=$len and ResourceSortNo like '$rootid%'";            file://sql查询语句

  ora_parse($cursor_tree, $query) or die;

  ora_exec($cursor_tree);



  $child_fullname="R".$rootid."Child";                     file://div 子级区别标志

  echo "<DIV class=child id=$child_fullname>";             file://打印一个div子级头

  while(ora_fetch($cursor_tree)){

    $Sort_No  = trim(ora_getcolumn($cursor_tree,0));

    $Sort_Title = trim(ora_getcolumn($cursor_tree,1));

    $Bottom_Flag  = trim(ora_getcolumn($cursor_tree,2));

    print_child_from_rootsortid($Sort_Title,$Sort_No, $Bottom_Flag);           file://循环调用打印子级编码函数

  }

  echo "</DIV>";



}

file://判断是否是末级标志,并且打印子级编码的函数

function print_child_from_rootsortid($Section_Title,$Section_No,$Bottom_Flag){

  global $num;

  $len=2*$num+2;

  for($j=0;$j<$len;$j++){

    echo "&nbsp";

  }                                                                   file://输出节点之间间距空格的循环



  if($Bottom_Flag==1){

    echo "

    <IMG border=0 height=13 src=\"image/folderclosed000.gif\" width=19>

    <A href=\"http://www.csdn.net/expert/exchange.asp\" target=forum>$Section_Title</A><BR>";

  }else{

    $p_id="R".$Section_No;

    $p_pic="R".$Section_No."img";

    echo "

    <IMG border=0 height=13 id=$p_pic src=\"image/folderclosed000.gif\" width=19>

    <A href=\"http://www.csdn.net/expert/exchange.asp\" onclick=\"expandIt('$p_id'); return false\">$Section_Title</A><BR>";

    $child_fullname="R".$Section_No."Child";

    echo "<DIV class=child id=$child_fullname>";                     file://打印div子标志头

    find_allchild_from_rootsortid($Section_No);                      file://查找子级别内容-----嵌套递归函数甲

    echo "</DIV>";                                                   file://打印div子标尾部



  }



}

file://查询所有子级编码的函数

function find_allchild_from_rootsortid($Section_No){

  global $handle,$num;

  $num++;

  $cursor_ary[$num] = ora_open($handle);

  $len=strlen($Section_No)+2;      file://μ?μ?×ó??±e±ào?3¤?è

  $query = "SELECT ResourceSortNo,ResourceSortName,SectionBottomFlag

            From TbSort

            Where length(ResourceSortNo)=$len and ResourceSortNo like '$rootid%'";            file://sql查询语句

  ora_parse($cursor_ary[$num], $query) or die;

  ora_exec($cursor_ary[$num]);

  while(ora_fetch($cursor_ary[$num]))

  {

    $Sort_Title = trim(ora_getcolumn($cursor_ary[$num],1));

    $Sort_No  = trim(ora_getcolumn($cursor_ary[$num],0));

    $Bottom_Flag  = trim(ora_getcolumn($cursor_ary[$num],2));

    print_child_from_rootsortid($Sort_Title,$Sort_No,$Bottom_Flag);       file://打印所有的子级节点-----嵌套递归函数乙

  }

  $num--;

}

?>