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

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

/**

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;

}

?>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/298812.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Net 5.0 快速开发框架 YC.Boilerplate--框架介绍

YC.Boilerplate 框架介绍YC.Boilerplate 是一套快速开发框架&#xff0c;采用当下流行的前后端分离开发模式&#xff0c;前端 采用VUE、后端采用Net 5.0&#xff1b;框架实现了 多租户、动态webApi、多种ORM、IOC、数据库表和业务代码生成等等一系列模块&#xff0c;并开发了用…

老师:你根本不知道我有多想逃课

1 这个时候如果不小心吸了一口就是另一个故事了▼2 抓到一只正在吐泡泡的蓝胖子&#xff01;▼3 腿短怎么了&#xff1f;我腿短我可爱&#xff01;你学我是几个意思&#xff1f;▼4 我本以为这是一个温馨的故事▼5 老师&#xff1a;你根本想象不到我有多想逃课&#xff01…

允许服务与桌面交互_vivo 正式推出 Origin OS,融合自然设计与全新交互_搜狐汽车...

点击右上角关注我们&#xff0c;每天给您带来最新最潮的科技资讯&#xff0c;让您足不出户也知道科技圈大事&#xff01;今天下午&#xff0c;vivo 推出了全新 Origin OS 手机系统。它采用了源于自然界的设计理念&#xff0c;同时加入了全新并且允许用户进行深度自定义的交互方…

有研究irrlicht引擎的吗,交流交流

我最近在研究这个开源引擎不知道irrlicht引擎和其他商业引擎比起来怎么样&#xff1f;这个引擎虽然没有IDE不过一直在更新&#xff0c;在进步。知道这个引擎的发表发表你的看法补充:最近找到了irrlicht中文官方论坛 有很多牛人是知名的网络游戏开发论坛和游戏玩家论坛忘了写网址…

oracle数据库转sqlite,Sqlite导入Oracle软件(SqliteToOracle)

SqliteToOracle是一款专业的SQLite数据库管理器导入或导出到Oracle&#xff0c;软件允许您快速轻松地将数据或表从SQLite结构传输到Oracle。 该应用程序允许您传输单个表或整组数据&#xff0c;以及定义通过SQL查询导出的源。有需要的小伙伴欢迎来西西下载体验。基本简介&#…

WPF企业内训全程实录(下)

摘要 WPF企业内训全程实录由于文章比较长&#xff0c;所以一共拆分成了三篇&#xff0c;上篇WPF企业内训全程实录&#xff08;上&#xff09;主要讲了基础&#xff0c;中篇WPF企业内训全程实录(中)主要讲解开发模式、团队协作及应用框架&#xff0c;起着承上启下的作用,主要讲解…

WPF之DataGrid

1、WPF 4 DataGrid 控件&#xff08;基本功能篇&#xff09; 基本使用&#xff0c;绑定数据展示 2、WPF 4 DataGrid 控件&#xff08;自定义样式篇&#xff09; 定义行&#xff0c;列&#xff0c;头&#xff0c;单元格等样式 3、WPF 4 DataGrid 控件&#xff08;进阶篇一&#…

WTM框架使用技巧之:Layui版本嫁接Vue+ElementUI

快点关注我们吧作者介绍庄星睿&#xff0c;现就职于海运物流行业&#xff0c;威海新海丰物流有限公司&#xff0c;IT技术兼管理职务。从事过winform,wpf技术开发&#xff0c;自2019年接触wtm框架后&#xff0c;热衷使用wtm框架开发物流公司内部软件。如高度定制化的SOC自备箱管…

现在女生的床真的都是这样吗?

1 兰花螳螂喜欢模拟兰花的形态&#xff0c;从而吸引猎物2 女生的床真是这样吗&#xff1f;真的假的啊3 双胞胎姐妹在妈妈肚子里打架概率只有三千万分之一4 用户真正的需求和自以为是的产品设计5 你看我们都尽力给你腾地方了……6 野外生存技能】过滤浑水的方法7 解释一下原理你…

研究发现:一心多用会使认知水平下降

有些人喜欢一边在网上搜寻新款鞋样&#xff0c;一边和朋友聊天&#xff0c;同时还不忘观看最新一季美国时装真人秀节目《天桥骄子》&#xff08;Project Runway&#xff09;。因此&#xff0c;下面这则消息对他们来说可不太好&#xff1a;科学家们在有史以来首次对长期一心多用…

让对话框不显示边框_微信消息“无边框”模式搭配这款壁纸,简直绝了

技能&#xff1a;好运壁纸&#xff0c;微信“无边框”聊天背景图难度系数&#xff1a;1颗星适用系统&#xff1a;安卓&#xff0c;iOS(苹果)今天所长想给大家介绍一组会让人好运爆棚的壁纸&#xff0c;不过&#xff0c;运营妹纸给我分享了一款有趣的聊天背景图&#xff0c;换上…

一切阅读都是误读

一切阅读都是误读 一切阅读都是误读 —— 安伯托•艾柯 上次读这本书已经是五年前的事了&#xff0c;中文版刚出版我就买了一本。那时候&#xff0c;我的工作相对比较清闲&#xff0c;有大量的时间阅读。恰巧我在负责公司的校园招聘及新员工培训&#xff0c;非常需要一些不错的…

理解流量监管和整形的关键算法—令牌桶

理解流量监管和整形的关键算法—令牌桶无论是流量监管还是流量整形都提到一个超额流量的问题&#xff0c;而前面已经描述了监管和整形对超额流量的处理方式不同&#xff0c;监管丢弃或者重标记&#xff0c;流量整形是缓存&#xff0c;通过加大延迟的方式发送平滑的数据流量&…

面试官: 平时开发中你用过读写锁吗?

前面实现了一个 带值变更通知能力的字典类(线程不安全)&#xff0c;童鞋们有没有发现演示代码使用了 lock语法糖&#xff0c; 这个有没有问题呢&#xff1f;没背景说个铲铲同程艺龙基础架构部推出的数据获取组件DAL.Connection&#xff0c;我们要做到在切换连接配置时清空数据库…

如何计算一只鸡的表面积?各大专业的奇葩解法

全世界只有3.14 % 的人关注了爆炸吧知识今天&#xff0c;知识君跟大家来算一下一只鸡的表面积吧。数学系

文件夹里打开终端

$sudo apt-get install nautilus-open-terminal 这样便会在每个文件夹的右键菜单中出现 "在终端中打开" 的一个选项, 选择便会打开一个终端, 路径为当前文件夹! 当然, 可以使用 nautilus-scripts 添加右键扩展. 在 ~/.gnome2/nautilus-scripts/ 目录下新建一个文件名…

如何删除SQL Server下注册的服务器

删除对应的sql server的注册服务器&#xff1a; HKEY_CURRENT_USER\Software\Microsoft\Microsoft SQL Server\80\Tools\SQLEW\Registered Servers X\SQL Server 组中&#xff0c; 直接删除你你要删除的那个注册名就可以了 转载于:https://www.cnblogs.com/tohen/archive/2010/…

oracle绑定变量过多,oracle - 在SQL Plus中使用绑定变量并返回多行? - 堆栈内存溢出...

这是一个愚蠢的问题&#xff0c;但我似乎无法解决。 我有一个查询在OCI程序中引起麻烦&#xff0c;因此我想在SQL * Plus中手动运行它以检查是否有任何区别。 这是查询&#xff1a;select e.label as doc_name,e.url,i.item_id,multi as form_typefrom cr_items i, cr_extlinks…

ArrayPool 源码解读之 byte[] 也能池化?

一&#xff1a;背景 1. 讲故事最近在分析一个 dump 的过程中发现其在 gen2 和 LOH 上有不少size较大的free&#xff0c;仔细看了下&#xff0c;这些free生前大多都是模板引擎生成的html片段的byte[]数组&#xff0c;当然这篇我不是来分析dump的&#xff0c;而是来聊一下&#x…