无限分类树的代码有很多,下面是个示例:

/**

by lenush;

*/

class Tree

{

var $data = array();

var $child = array(-1=>array());

var $layer = array(-1=>-1);

var $parent = array();

function Tree ($value)

{

$this->setNode(0, -1, $value);

} // end func

function setNode ($id, $parent, $value)

{

$parent = $parent?$parent:0;

$this->data[$id] = $value;

$this->child[$id] = array();

$this->child[$parent][] = $id;

$this->parent[$id] = $parent;

if (!isset($this->layer[$parent]))

{

$this->layer[$id] = 0;

}

else

{

$this->layer[$id] = $this->layer[$parent] + 1;

}

} // end func

function getList (&$tree, $root= 0)

{

foreach ($this->child[$root] as $key=>$id)

{

$tree[] = $id;

if ($this->child[$id]) $this->getList($tree, $id);

}

} // end func

function getValue ($id)

{

return $this->data[$id];

} // end func

function getLayer ($id, $space = false)

{

return $space?str_repeat($space, $this->layer[$id]):$this->layer[$id];

} // end func

function getParent ($id)

{

return $this->parent[$id];

} // end func

function getParents ($id)

{

while ($this->parent[$id] != -1)

{

$id = $parent[$this->layer[$id]] = $this->parent[$id];

}

ksort($parent);

reset($parent);

return $parent;

} // end func

function getChild ($id)

{

return $this->child[$id];

} // end func

function getChilds ($id = 0)

{

$child = array($id);

$this->getList($child, $id);

return $child;

} // end func

} // end class

//new Tree(根目录的名字);

//根目录的ID自动分配为0

$Tree = new Tree('目录导航');

//setNode(目录ID,上级ID,目录名字);

$Tree->setNode(1, 0, '目录1');

$Tree->setNode(2, 1, '目录2');

$Tree->setNode(3, 0, '目录3');

$Tree->setNode(4, 3, '目录3.1');

$Tree->setNode(5, 3, '目录3.2');

$Tree->setNode(6, 3, '目录3.3');

$Tree->setNode(7, 2, '目录2.1');

$Tree->setNode(8, 2, '目录2.2');

$Tree->setNode(9, 2, '目录2.3');

$Tree->setNode(10, 6, '目录3.3.1');

$Tree->setNode(11, 6, '目录3.3.2');

$Tree->setNode(12, 6, '目录3.3.3');

//getChilds(指定目录ID);

//取得指定目录下级目录.如果没有指定目录就由根目录开始

$category = $Tree->getChilds();

//遍历输出

foreach ($category as $key=>$id)

{

echo $Tree->getLayer($id, '|-').$Tree->getValue($id)."
n";

}

?>

你的需求中需要从xml文件读取组装成菜单,但是不知道你的xml结构,因此提高一个简单的xml解析方法,可以结合上面的程序使用。

$data = implode("",file('menu.xml'));

$parser = xml_parser_create();

xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);

xml_parse_into_struct($parser, $data, $xml_array, $tags);

xml_parser_free($parser);

$showMe = xmlToArr($xml_array);

echo "

";

print_r ($showMe);

echo "

";

function xmlToArr($xml_array,&$index=0,$start=0){

$num = count($xml_array);

$result = array();

for ($i = $start; $i < $num; $i++){

if ('open' == $xml_array[$i]['type']){

$start = $i+1;

$result[$xml_array[$i]['attributes']['ID']] = xmlToArr($xml_array,$index,$start);

$i = $index;

}else if ('close' == $xml_array[$i]['type']){

$index = $i;

return $result;

}else if ('complete' == $xml_array[$i]['type']){

$result[$xml_array[$i]['attributes']['ID']] = null;

}

}

return $result;

}

?>

Php xml 目录,PHP-PHP+xml的无限分类树目录的方法?相关推荐

  1. android无限级树形控件,无限分类树,无限层级树

    更新记录 3.1(2020-09-09) 修复小程序样式bug 3.0(2020-04-10) 增加保存折叠路径数组,可以还原折叠状态 全部折叠,全部打开 查看更多 当前功能有 多选,单选,不选.末级 ...

  2. 无限分类树--Treeview

    我最近在搞一个内部资料系统开发.用到Treeview,而且要需要无限分类,还要得到每个类包含的结果集!其实最重要的是比普通树表增加一列searchid,通过这列来进行查询!废话少讲,效果图如下: 其中 ...

  3. WinForm 数据库无限填充树目录 treeView

    我自己想的是处理数据库每一条数据,然后来插入子节点的子节点. 奈何没有插入子节点的子节点的办法,百度来百度去,一看全都是递归. 本来我是绝望的, 但是没办法,老板的需求不能驳回啊,于是就来ctrl c ...

  4. java打包没有src_maven 打包时,src/main/java目录下的xml等资源文件没有打包进去的问题...

    关于使用maven打包src/main/java中一些关于mybatis的xml都没有打包进去,导致war包启动不起来,在此记录一下,解决方法. 默认maven在src/main/java中只编译ja ...

  5. Maven出现User setting file does not exist ...\.m2\setting.xml的问题解决(同时也解决用户.m2目录下无setting.xml文件)

    Maven出现User setting file does not exist ...\.m2\setting.xml的问题解决(同时也解决用户.m2目录下无setting.xml文件) 参考文章: ...

  6. 解决项目编译的target目录下丢失xml文件

    由于Maven在默认的情况下针对我们的Java目录下的非Java文件不会执行编译操作,所以会在classes目录下丢失Mapper.xml文件 解决方法 在pom.xml文件的目录中添加 <!- ...

  7. Jlink新版驱动安装目录无JLinkDevices.xml添加新器件方法

    Jlink新版本驱动添加新器件方法 事情的起因是最近重装了系统,正好顺路更新下工具链.IAR9.30的黑色很不错. 安装最新版Jlink驱动V7.70E(2022/09/07)后由于需要使用几颗国产M ...

  8. html页面配置xml文件路径,web.xml与index.html

    一.部署描述符 1.每个web应用程序的配置信息都保存在各自所映射的文件系统目录下的Web-INF/web.xml文件中.web.xml文件用于描述web应用程序的部署信息,因此, web.xml文件 ...

  9. 【Groovy】自定义 Xml 生成器 BuilderSupport ( 构造 Xml 节点类 | 封装节点名称、节点值、节点属性、子节点 | 将封装的节点数据转为 Xml 字符串 )

    文章目录 一.构造 Xml 节点类 1.封装节点名称.节点值.节点属性.子节点 2.将封装的节点数据转为 Xml 字符串 二.Xml 节点类完整代码 一.构造 Xml 节点类 生成 Xml 数据前 , ...

最新文章

  1. sql server 海量数据速度提升:SQL优化-索引(11) 【转】
  2. 拒绝DNN过拟合,谷歌准确预测训练集与测试集泛化差异,还开源了数据集 | ICLR 2019...
  3. 合成孔径雷达技术——概述
  4. ntu课程笔记7454 期中复习
  5. 文本处理三剑客之 awk
  6. android 指针是什么意思,Android系统的智能指针(轻量级指针、强指针和弱指针)的实现原理分析(3)...
  7. 乘法最快的算法计算机,人类史上最快乘法算法诞生
  8. mysql中phpmyadmin安装教程_phpMyAdmin 安装教程全攻略
  9. 圣诞节必备装饰场景PSD设计素材,不仅高清高质量
  10. el-table 树形表格 自定义展开图标_IconJar for Mac(图标素材设计软件)
  11. bzoj 3209: 花神的数论题 喵哈哈村的秘境探险(四)
  12. 使用Visio 2003 + Oracle 11g创建ERD,反向工程师失败了吗?
  13. matlab求两向量夹角_高考数学一轮复习,利用空间向量求夹角和距离,各考点聚焦突破...
  14. 如何关闭服务器系统防火墙设置方法,怎么关闭防火墙 Windows自带防火墙关闭方法...
  15. java url地址不变_页面跳转后,浏览器地址栏地址保持不变
  16. Connect internal only, until freed错误处理
  17. 技术团队负责人应该具备怎样的能力
  18. Mina中的Pasta(Pallas和Vesta)曲线
  19. X10服务器主板装系统黑屏,E1-471G,黑苹果10.11,Clover无法进入安装界面,直接黑屏重启...
  20. 计算机为什么无法使用高级恢复,电脑怎么还原系统,win7电脑还原系统高级恢复方法-...

热门文章

  1. Exceptionless(二) - 使用进阶
  2. 从Xamarin.Essentials谈Xamarin库的封装
  3. Asp.Net Core 2.1+的视图缓存(响应缓存)
  4. 微软作为金牌会员加入Cloud Foundry基金会
  5. 下一代的 Actor 模型框架 Proto Actor
  6. 编写高性能 .NET 代码 第二章:垃圾回收
  7. .NET Core 2.0及.NET Standard 2.0
  8. 如何在多个项目中分离Asp.Net Core Mvc的Controller和Areas
  9. goldengate mysql_使用GoldenGate实现MySQL到Oracle的数据实时同步
  10. C# RichTextBox 实现循环查找关键字