php中如何获取全部子节点的父节点

php中如何获取全部子节点的父节点,第1张

假设你系统里数据库请求的函数是 pdo_query (你自己根据情况调整),表名是tblcate

另外,这段代码使用到了array_column函数,该函数从php5.5起才有,如果你的版本较低,要找一个兼容函数放到函数库里(官方文档评论中就有实现)

以下是代码文本 如果复制过去出现T_VARIABLE错误,就是代码中字符被系统混掉了,你要重新手打一下

//这里根据你的意思,应该是选出没有下级的节点,如果需要全部或其它的,你根据情况修改,不影响后面的其它 *** 作

$selectedNodes = pdo_query("select * from tblcate where pid not in(select pid from tblcate)")

//选出全部节点

$allNodes = pdo_query("select * from tblcate ")

//将节点数据使用id索引,方便获取

$allNodes = array_column($allNodes, NULL, 'id')

foreach($selectedNodes as &$node){

$tree = getParentNode($node['pid'])

//这里的$tree 是上级名称拼起来的,不包含本级名称,如要包含,在后面附加上就行了

$node['tree'] = implode(',',$tree)

}

unset($node)

var_export($selectedNodes )

function getParentNode($pid){

global $allNodes

$pnodes=[]

if($pid>0 &&isset($allNodes[$pid])){

$pNode = $allNodes[$pid]

$pnodes[]= $pNode['name']

$rnodes = getParentNode($pNode['pid'])

if(!empty($rnodes)){

$pnodes = array_merge($pnodes,$rnodes)

}

}

return $pnodes

}

function get_category($id){

$str=array()

//$sql = "select * from biao where id=$id"查询节点,自己写吧

$result = array('id'=>,'parent_id'=>)//查询结果一个数组格式

if($result){

$str = get_category($result['parent_id'])

$str[]=$result

}

return $str

}

}

调用get_category()就行了,$str第一个元素是节点本身,去掉就行了。

你看下面代码是否符合你的要求:

<html>

<head>

<link href='style.css' rel=stylesheet>

<meta http-equiv="Content-Type" content="text/htmlcharset=utf-8" />

<script language="JavaScript" src="TreeMenu.js"></script>

</head>

<body>

<?php

//基本变量设置

$GLOBALS["ID"] =1//用来跟踪下拉菜单的ID号

$layer=1//用来跟踪当前菜单的级数

//连接数据库

$Con=mysql_connect("localhost","root","1234")

mysql_select_db("wiki")

//提取一级菜单

$sql="SELECT * FROM wiki where pid=0"

$result=mysql_query($sql,$Con)

//如果一级菜单存在则开始菜单的显示

if(mysql_num_rows($result)>0) ShowTreeMenu($Con,$result,$layer,$ID)

//=============================================

//显示树型菜单函数 ShowTreeMenu($con,$result,$layer)

//$con:数据库连接

//$result:需要显示的菜单记录集

//layer:需要显示的菜单的级数

//=============================================

function ShowTreeMenu($Con,$result,$layer)

{

//取得需要显示的菜单的项目数

$numrows=mysql_num_rows($result)

//开始显示菜单,每个子菜单都用一个表格来表示

echo "<table cellpadding='0' cellspacing='0' border='0'>"

for($rows=0$rows<$numrows$rows++)

{

//将当前菜单项目的内容导入数组

$menu=mysql_fetch_array($result)

//提取菜单项目的子菜单记录集

$sql="select * from wiki where pid=$menu[cid]"

$result_sub=mysql_query($sql,$Con)

echo "<tr>"

//如果该菜单项目有子菜单,则添加JavaScript onClick语句

if(mysql_num_rows($result_sub)>0)

{

echo "<td width='20'><img src='folder.gif' border='0'></td>"

echo "<td class='Menu' onClick='javascript:ShowMenu(Menu".$GLOBALS["ID"].")'>"

}

else

{

echo "<td width='20'><img src='file.gif' border='0'></td>"

echo "<td class='Menu'>"

}

//如果该菜单项目没有子菜单,并指定了超级连接地址,则指定为超级连接,

//否则只显示菜单名称

//if($menu[url]!="")

//echo "<a href='$menu[cid]'>$menu[name]</a>"

//else

echo $menu['name']

echo "

</td>

</tr>

"

//如果该菜单项目有子菜单,则显示子菜单

if(mysql_num_rows($result_sub)>0)

{

//指定该子菜单的ID和style,以便和onClick语句相对应

echo "<tr id=Menu".$GLOBALS["ID"]++." style='display:none'>"

echo "<td width='20'></td>"

echo "<td>"

//将级数加1

$layer++

//递归调用ShowTreeMenu()函数,生成子菜单

ShowTreeMenu($Con,$result_sub,$layer)

//子菜单处理完成,返回到递归的上一层,将级数减1

$layer--

echo "</td></tr>"

}

//继续显示下一个菜单项目

}

echo "</table>"

}

?>

</body>

</html>


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6699667.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-27
下一篇 2023-03-27

发表评论

登录后才能评论

评论列表(0条)

保存