zl程序教程

您现在的位置是:首页 >  后端

当前栏目

PHP无限分类代码,支持数组格式化、直接输出菜单两种方式

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;
}
}
?>