初学“PHP编程实现目录树”,谁帮忙解释下? PHP编程实现目录树http://blog.sina.com.cn/s/blog_4ab1abd3010006vv.html得到节点数”一节中的$p变量从何而来?请帮忙解释一下初学编程,请大侠帮忙解释下各个变量的意义如何?看得实在头大啊 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 为方便大家指导,把代码粘贴在下面,请不吝指导附:PHP编程实现目录树 <?php //*********************************************// 功能:PHP编程实现目录树// 说明:变量$treefile 需要在主文件里设置// 目录树文件格式:// .top// ..category 1// ...item 1.1|item11.htm|main// ...item 1.2|item12.htm|main// ..category 2|cat2overview.htm|main// ...item 2.1|item21.htm|main// ...item 2.2|item22.htm|main// ...item 2.3|item23.htm|main//********************************************* $script = $SCRIPT_NAME;$img_expand = "tree_expand.gif"; //可展开图片$img_collapse = "tree_collapse.gif"; //可收缩图片$img_line = "tree_vertline.gif"; //直线图片$img_split = "tree_split.gif"; //分杈图片$img_end = "tree_end.gif"; //树结$img_leaf = "tree_leaf.gif"; //树叶$img_spc = "tree_space.gif"; //空白图片//*********************************************// 丛树结构文件中读出内容//*********************************************//*********************************************//* 数组变量$tree//* tree[x][0] -> tree level 层//* tree[x][1] -> item text 条目名称//* tree[x][2] -> item link 条目连接//* tree[x][3] -> link target 连接目标//* tree[x][4] -> last item in subtree//*********************************************$maxlevel=0;$cnt=0;$fd = fopen($treefile, "r");if ($fd==0) die("treemenu.inc : Unable to open file ".$treefile);while ($buffer = fgets($fd, 4096)) { $tree[$cnt][0]=strspn($buffer,"."); $tmp=rtrim(substr($buffer,$tree[$cnt][0])); $node=explode("|",$tmp); $tree[$cnt][1]=$node[0]; $tree[$cnt][2]=$node[1]; $tree[$cnt][3]=$node[2]; $tree[$cnt][4]=0; if ($tree[$cnt][0] > $maxlevel) $maxlevel=$tree[$cnt][0]; $cnt++;}fclose($fd);for ($i=0; $i<count($tree); $i++){ $expand[$i]=0; $visible[$i]=0; $levels[$i]=0;}//*********************************************// 得到节点数//*********************************************if ($p!="") $explevels = explode("|",$p);$i=0;while($i<count($explevels)){ $expand[$explevels[$i]]=1; $i++;}//*********************************************// 找到最后一个下一级结点//*********************************************$lastlevel=$maxlevel;for ($i=count($tree)-1; $i>=0; $i--){ if ( $tree[$i][0] < $lastlevel ) { for ($j=$tree[$i][0]+1; $j <= $maxlevel; $j++) { $levels[$j]=0; } } if ( $levels[$tree[$i][0]]==0 ) { $levels[$tree[$i][0]]=1; $tree[$i][4]=1; } else { $tree[$i][4]=0; } $lastlevel=$tree[$i][0]; }//*********************************************// 判定可视结点//*********************************************$visible[0]=1; // root is always visiblefor ($i=0; $i<count($explevels); $i++){ $n=$explevels[$i]; if ( ($visible[$n]==1) && ($expand[$n]==1) ) { $j=$n+1; while ( $tree[$j][0] > $tree[$n][0] ) { if ($tree[$j][0]==$tree[$n][0]+1) $visible[$j]=1; $j++; } }}//*********************************************// 输出格式化的目录树//*********************************************for ($i=0; $i<$maxlevel; $i++) $levels[$i]=1;$maxlevel++;echo "<table cellspacing=0 cellpadding=0 border=0 cols=".($maxlevel+3)." width=".($maxlevel*16+100).">\n";echo "<tr>";for ($i=0; $i<$maxlevel; $i++) echo "<td width=16></td>";echo "<td width=100></td></tr>\n";$cnt=0;while ($cnt<count($tree)){ if ($visible[$cnt]) { //开始新的一 行 echo "<tr>"; //来自较高一层的树直线 $i=0; while ($i<$tree[$cnt][0]-1) { if ($levels[$i]==1) echo "<td><img src=\"".$img_line."\"></td>"; else echo "<td><img src=\"".$img_spc."\"></td>"; $i++; } //下一级结点 if ($tree[$cnt][4]==1) { echo "<td><img src=\"".$img_end."\"></td>"; $levels[$tree[$cnt][0]-1]=0; } else { echo "<td><img src=\"".$img_split."\"></td>"; $levels[$tree[$cnt][0]-1]=1; } //节点(有下一级)或树叶 (无下一级) if ($tree[$cnt+1][0]>$tree[$cnt][0]) { //生成展开或收缩参数 $i=0; $params="?p="; while($i<count($expand)) { if ( ($expand[$i]==1) && ($cnt!=$i) || ($expand[$i]==0 && $cnt==$i)) { $params=$params.$i; $params=$params."|"; } $i++; } if ($expand[$cnt]==0) echo "<td><a href=\"".$script.$params."\"><img src=\"".$img_expand."\" border=no></a></td>"; else echo "<td><a href=\"".$script.$params."\"><img src=\"".$img_collapse."\" border=no></a></td>"; } else { //树叶 echo "<td><img src=\"".$img_leaf."\"></td>"; } //输出条目名称 if ($tree[$cnt][2]=="") echo "<td colspan=".($maxlevel-$tree[$cnt][0]).">".$tree[$cnt][1]."</td>"; else echo "<td colspan=".($maxlevel-$tree[$cnt][0])."><a href=\"".$tree[$cnt][2]."\" target=\"".$tree[$cnt][3]."\">".$tree[$cnt][1]."</a></td>"; //结束行 echo "</tr>\n"; } $cnt++; }echo "</table>\n";?> 传入的,或应用程序指定的形如“...item 1.2|item12.htm|main ”的字符串 PHP上传图片出错:没有权限 数组问题... 网站留言板的问题!!跪求大神帮忙! 谁有留言簿源代码,发个给我吧 PHP新手--奇怪的SQL查询结果 GB码到UTF码,但服务器不支持iconv()怎么办? 腾讯微博API接口的问题 这段代码下面如何改可以保证上传成功 各位大侠.谁知道这个网站是用什么开发的呢? 奇怪的问题 php 为什么说php可以采用面向对象和面向过程两种开发模式
//*********************************************
// 功能:PHP编程实现目录树
// 说明:变量$treefile 需要在主文件里设置
// 目录树文件格式:
// .top
// ..category 1
// ...item 1.1|item11.htm|main
// ...item 1.2|item12.htm|main
// ..category 2|cat2overview.htm|main
// ...item 2.1|item21.htm|main
// ...item 2.2|item22.htm|main
// ...item 2.3|item23.htm|main
//*********************************************
$script = $SCRIPT_NAME;$img_expand = "tree_expand.gif"; //可展开图片
$img_collapse = "tree_collapse.gif"; //可收缩图片
$img_line = "tree_vertline.gif"; //直线图片
$img_split = "tree_split.gif"; //分杈图片
$img_end = "tree_end.gif"; //树结
$img_leaf = "tree_leaf.gif"; //树叶
$img_spc = "tree_space.gif"; //空白图片//*********************************************
// 丛树结构文件中读出内容
//*********************************************//*********************************************
//* 数组变量$tree
//* tree[x][0] -> tree level 层
//* tree[x][1] -> item text 条目名称
//* tree[x][2] -> item link 条目连接
//* tree[x][3] -> link target 连接目标
//* tree[x][4] -> last item in subtree
//*********************************************$maxlevel=0;
$cnt=0;$fd = fopen($treefile, "r");
if ($fd==0) die("treemenu.inc : Unable to open file ".$treefile);
while ($buffer = fgets($fd, 4096))
{
$tree[$cnt][0]=strspn($buffer,".");
$tmp=rtrim(substr($buffer,$tree[$cnt][0]));
$node=explode("|",$tmp);
$tree[$cnt][1]=$node[0];
$tree[$cnt][2]=$node[1];
$tree[$cnt][3]=$node[2];
$tree[$cnt][4]=0;
if ($tree[$cnt][0] > $maxlevel) $maxlevel=$tree[$cnt][0];
$cnt++;
}
fclose($fd);for ($i=0; $i<count($tree); $i++)
{
$expand[$i]=0;
$visible[$i]=0;
$levels[$i]=0;
}//*********************************************
// 得到节点数
//*********************************************if ($p!="") $explevels = explode("|",$p);$i=0;
while($i<count($explevels))
{
$expand[$explevels[$i]]=1;
$i++;
}//*********************************************
// 找到最后一个下一级结点
//*********************************************$lastlevel=$maxlevel;
for ($i=count($tree)-1; $i>=0; $i--)
{
if ( $tree[$i][0] < $lastlevel )
{
for ($j=$tree[$i][0]+1; $j <= $maxlevel; $j++)
{
$levels[$j]=0;
}
}
if ( $levels[$tree[$i][0]]==0 )
{
$levels[$tree[$i][0]]=1;
$tree[$i][4]=1;
}
else
{
$tree[$i][4]=0;
}
$lastlevel=$tree[$i][0];
}//*********************************************
// 判定可视结点
//*********************************************$visible[0]=1; // root is always visible
for ($i=0; $i<count($explevels); $i++)
{
$n=$explevels[$i];
if ( ($visible[$n]==1) && ($expand[$n]==1) )
{
$j=$n+1;
while ( $tree[$j][0] > $tree[$n][0] )
{
if ($tree[$j][0]==$tree[$n][0]+1) $visible[$j]=1;
$j++;
}
}
}//*********************************************
// 输出格式化的目录树
//*********************************************for ($i=0; $i<$maxlevel; $i++) $levels[$i]=1;$maxlevel++;echo "<table cellspacing=0 cellpadding=0 border=0 cols=".($maxlevel+3)." width=".($maxlevel*16+100).">\n";
echo "<tr>";
for ($i=0; $i<$maxlevel; $i++) echo "<td width=16></td>";
echo "<td width=100></td></tr>\n";
$cnt=0;
while ($cnt<count($tree))
{
if ($visible[$cnt])
{
//开始新的一 行
echo "<tr>"; //来自较高一层的树直线
$i=0;
while ($i<$tree[$cnt][0]-1)
{
if ($levels[$i]==1)
echo "<td><img src=\"".$img_line."\"></td>";
else
echo "<td><img src=\"".$img_spc."\"></td>";
$i++;
} //下一级结点
if ($tree[$cnt][4]==1)
{
echo "<td><img src=\"".$img_end."\"></td>";
$levels[$tree[$cnt][0]-1]=0;
}
else
{
echo "<td><img src=\"".$img_split."\"></td>";
$levels[$tree[$cnt][0]-1]=1;
} //节点(有下一级)或树叶 (无下一级)
if ($tree[$cnt+1][0]>$tree[$cnt][0])
{ //生成展开或收缩参数
$i=0; $params="?p=";
while($i<count($expand))
{
if ( ($expand[$i]==1) && ($cnt!=$i) || ($expand[$i]==0 && $cnt==$i))
{
$params=$params.$i;
$params=$params."|";
}
$i++;
} if ($expand[$cnt]==0)
echo "<td><a href=\"".$script.$params."\"><img src=\"".$img_expand."\" border=no></a></td>";
else
echo "<td><a href=\"".$script.$params."\"><img src=\"".$img_collapse."\" border=no></a></td>";
}
else
{
//树叶
echo "<td><img src=\"".$img_leaf."\"></td>";
} //输出条目名称
if ($tree[$cnt][2]=="")
echo "<td colspan=".($maxlevel-$tree[$cnt][0]).">".$tree[$cnt][1]."</td>";
else
echo "<td colspan=".($maxlevel-$tree[$cnt][0])."><a href=\"".$tree[$cnt][2]."\" target=\"".$tree[$cnt][3]."\">".$tree[$cnt][1]."</a></td>"; //结束行
echo "</tr>\n";
}
$cnt++;
}
echo "</table>\n";?>