PHP无限分类代码,支持数组格式化、直接输出菜单两种方式
2023-06-13 09:14:28 时间
<?php
/**
+------------------------------------------------
*通用的树型类
+------------------------------------------------
*@authoryangyunzhou@foxmail.com
+------------------------------------------------
*@date2010年11月23日10:09:31
+------------------------------------------------
*/
classTree
{
/**
+------------------------------------------------
*生成树型结构所需要的2维数组
+------------------------------------------------
*@authoryangyunzhou@foxmail.com
+------------------------------------------------
*@varArray
*/
var$arr=array();
/**
+------------------------------------------------
*生成树型结构所需修饰符号,可以换成图片
+------------------------------------------------
*@authoryangyunzhou@foxmail.com
+------------------------------------------------
*@varArray
*/
var$icon=array("│","├","└");
/**
*@accessprivate
*/
var$ret="";
/**
*构造函数,初始化类
*@paramarray2维数组,例如:
*array(
*1=>array("id"=>"1","parentid"=>0,"name"=>"一级栏目一"),
*2=>array("id"=>"2","parentid"=>0,"name"=>"一级栏目二"),
*3=>array("id"=>"3","parentid"=>1,"name"=>"二级栏目一"),
*4=>array("id"=>"4","parentid"=>1,"name"=>"二级栏目二"),
*5=>array("id"=>"5","parentid"=>2,"name"=>"二级栏目三"),
*6=>array("id"=>"6","parentid"=>3,"name"=>"三级栏目一"),
*7=>array("id"=>"7","parentid"=>3,"name"=>"三级栏目二")
*)
*/
functiontree($arr=array())
{
$this->arr=$arr;
$this->ret="";
returnis_array($arr);
}
/**
*得到父级数组
*@paramint
*@returnarray
*/
functionget_parent($myid)
{
$newarr=array();
if(!isset($this->arr[$myid]))returnfalse;
$pid=$this->arr[$myid]["pid"];
$pid=$this->arr[$pid]["pid"];
if(is_array($this->arr))
{
foreach($this->arras$id=>$a)
{
if($a["pid"]==$pid)$newarr[$id]=$a;
}
}
return$newarr;
}
/**
*得到子级数组
*@paramint
*@returnarray
*/
functionget_child($myid)
{
$a=$newarr=array();
if(is_array($this->arr))
{
foreach($this->arras$id=>$a)
{
if($a["pid"]==$myid)$newarr[$id]=$a;
}
}
return$newarr?$newarr:false;
}
/**
*得到当前位置数组
*@paramint
*@returnarray
*/
functionget_pos($myid,&$newarr)
{
$a=array();
if(!isset($this->arr[$myid]))returnfalse;
$newarr[]=$this->arr[$myid];
$pid=$this->arr[$myid]["pid"];
if(isset($this->arr[$pid]))
{
$this->get_pos($pid,$newarr);
}
if(is_array($newarr))
{
krsort($newarr);
foreach($newarras$v)
{
$a[$v["id"]]=$v;
}
}
return$a;
}
/**
*-------------------------------------
*得到树型结构
*-------------------------------------
*@authoryangyunzhou@foxmail.com
*@param$myid表示获得这个ID下的所有子级
*@param$str生成树形结构基本代码,例如:"<optionvalue=\$id\$select>\$spacer\$name</option>"
*@param$sid被选中的ID,比如在做树形下拉框的时候需要用到
*@param$adds
*@param$str_group
*/
functionget_tree($myid,$str,$sid=0,$adds="",$str_group="")
{
$number=1;
$child=$this->get_child($myid);
if(is_array($child)){
$total=count($child);
foreach($childas$id=>$a){
$j=$k="";
if($number==$total){
$j.=$this->icon[2];
}else{
$j.=$this->icon[1];
$k=$adds?$this->icon[0]:"";
}
$spacer=$adds?$adds.$j:"";
$selected=$id==$sid?"selected":"";
@extract($a);
$parentid==0&&$str_group?eval("\$nstr=\"$str_group\";"):eval("\$nstr=\"$str\";");
$this->ret.=$nstr;
$this->get_tree($id,$str,$sid,$adds.$k." ",$str_group);
$number++;
}
}
return$this->ret;
}
/**
*同上一方法类似,但允许多选
*/
functionget_tree_multi($myid,$str,$sid=0,$adds="")
{
$number=1;
$child=$this->get_child($myid);
if(is_array($child))
{
$total=count($child);
foreach($childas$id=>$a)
{
$j=$k="";
if($number==$total)
{
$j.=$this->icon[2];
}
else
{
$j.=$this->icon[1];
$k=$adds?$this->icon[0]:"";
}
$spacer=$adds?$adds.$j:"";
$selected=$this->have($sid,$id)?"selected":"";
@extract($a);
eval("\$nstr=\"$str\";");
$this->ret.=$nstr;
$this->get_tree_multi($id,$str,$sid,$adds.$k." ");
$number++;
}
}
return$this->ret;
}
functionhave($list,$item){
return(strpos(",,".$list.",",",".$item.","));
}
/**
+------------------------------------------------
*格式化数组
+------------------------------------------------
*@authoryangyunzhou@foxmail.com
+------------------------------------------------
*/
functiongetArray($myid=0,$sid=0,$adds="")
{
$number=1;
$child=$this->get_child($myid);
if(is_array($child)){
$total=count($child);
foreach($childas$id=>$a){
$j=$k="";
if($number==$total){
$j.=$this->icon[2];
}else{
$j.=$this->icon[1];
$k=$adds?$this->icon[0]:"";
}
$spacer=$adds?$adds.$j:"";
@extract($a);
$a["title"]=$spacer."".$a["title"];
$this->ret[$a["id"]]=$a;
$fd=$adds.$k." ";
$this->getArray($id,$sid,$fd);
$number++;
}
}
return$this->ret;
}
}
?>
相关文章
- php静态延迟方法,phpstatic延迟静态绑定_PHP教程
- PHP和MySQL:构建动态网站的利器(php与mysql)
- 开发Linux下PHP模块开发:实现程序性能最大化(linux下php模块)
- 数据快速学习:使用 PHP 读取 MySQL 数据(php读取mysql)
- php pack的理解详解编程语言
- 强大的PHP环境,支持Redis全面提升效能(php支持redis)
- 技巧Linux新手必知的PHP换行技巧(linux换行php)
- 在 Linux 中编译PHP程序(linux编译php)
- PHP如何正确输出MySQL中文字符避免乱码?(php输出mysql乱码)
- Linux平台如何测试PHP环境(linux测试php环境)
- PHP轻松访问MySQL数据:使用简明易懂的方法获取数据(php获取mysql数据)
- 「Linux下的PHP开发」(linux开发php)
- 如何在Linux下顺利安装PHP?(在linux下安装php)
- 深入理解PHP操作MySQL类库的精髓(php操作mysql类库)
- 坚持不懈:用PHP实现MSSQL数据库连接(php链接mssql函数)
- 解决PHP输出MSSQL数据中文乱码问题(php输出MSSQL乱码)
- PHP连接MSSQL:让你更快更好地实现数据互通(php接mssql)
- PHP实现MSSQL数据库分页功能(php分页类 mssql)
- 深入Linux:高效部署PHP项目(linux部署php项目)
- 记录PHP之MySQL踩坑:如何防止重复记录(php mysql 重复)
- 内存Redis自动优化PHP内存管理(redis自动释放php)
- PHP中显示格式化的用户输入
- PHP和Mysqlweb应用开发核心技术第1部分Php基础-1开始了解php
- php入门学习知识点三PHP上传
- php入门学习知识点七PHP函数的基本应用
- php通过COM类调用组件的实现代码
- PHP中运用jQuery的Ajax跨域调用实现代码
- PHP操作Memcache实例介绍
- php代码书写习惯优化小结
- PHP中将ip地址转成十进制数的两种实用方法
- 将php数组输出html表格的方法
- php导出csv数据在浏览器中输出提供下载或保存到文件的示例
- 在Ubuntu14.04上部署PHP环境及WordPress