搜索
首页php教程php手册PHP无限分类代码,支持数组格式化、直接输出菜单两种方式

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

Jun 13, 2016 pm 12:09 PM
php代码分类复制支持数组方式无限格式化菜单输出

复制代码 代码如下:


/**
+------------------------------------------------
* 通用的树型类
+------------------------------------------------
* @author yangyunzhou@foxmail.com
+------------------------------------------------
* @date 2010年11月23日10:09:31
+------------------------------------------------
*/
class Tree
{

/**
+------------------------------------------------
* 生成树型结构所需要的2维数组
+------------------------------------------------
* @author yangyunzhou@foxmail.com
+------------------------------------------------
* @var Array
*/
var $arr = array();

/**
+------------------------------------------------
* 生成树型结构所需修饰符号,可以换成图片
+------------------------------------------------
* @author yangyunzhou@foxmail.com
+------------------------------------------------
* @var Array
*/
var $icon = array('│','├',' └');

/**
* @access private
*/
var $ret = '';

/**
* 构造函数,初始化类
* @param array 2维数组,例如:
* 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'=>'三级栏目二')
* )
*/
function tree($arr=array())
{
$this->arr = $arr;
$this->ret = '';
return is_array($arr);
}

/**
* 得到父级数组
* @param int
* @return array
*/
function get_parent($myid)
{
$newarr = array();
if(!isset($this->arr[$myid])) return false;
$pid = $this->arr[$myid]['pid'];
$pid = $this->arr[$pid]['pid'];
if(is_array($this->arr))
{
foreach($this->arr as $id => $a)
{
if($a['pid'] == $pid) $newarr[$id] = $a;
}
}
return $newarr;
}

/**
* 得到子级数组
* @param int
* @return array
*/
function get_child($myid)
{
$a = $newarr = array();
if(is_array($this->arr))
{
foreach($this->arr as $id => $a)
{
if($a['pid'] == $myid) $newarr[$id] = $a;
}
}
return $newarr ? $newarr : false;
}

/**
* 得到当前位置数组
* @param int
* @return array
*/
function get_pos($myid,&$newarr)
{
$a = array();
if(!isset($this->arr[$myid])) return false;
$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($newarr as $v)
{
$a[$v['id']] = $v;
}
}
return $a;
}

/**
* -------------------------------------
* 得到树型结构
* -------------------------------------
* @author yangyunzhou@foxmail.com
* @param $myid 表示获得这个ID下的所有子级
* @param $str 生成树形结构基本代码, 例如: ""
* @param $sid 被选中的ID, 比如在做树形下拉框的时候需要用到
* @param $adds
* @param $str_group
*/
function get_tree($myid, $str, $sid = 0, $adds = '', $str_group = '')
{
$number=1;
$child = $this->get_child($myid);
if(is_array($child)) {
$total = count($child);
foreach($child as $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;
}

/**
* 同上一方法类似,但允许多选
*/
function get_tree_multi($myid, $str, $sid = 0, $adds = '')
{
$number=1;
$child = $this->get_child($myid);
if(is_array($child))
{
$total = count($child);
foreach($child as $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;
}

function have($list,$item){
return(strpos(',,'.$list.',',','.$item.','));
}

/**
+------------------------------------------------
* 格式化数组
+------------------------------------------------
* @author yangyunzhou@foxmail.com
+------------------------------------------------
*/
function getArray($myid=0, $sid=0, $adds='')
{
$number=1;
$child = $this->get_child($myid);
if(is_array($child)) {
$total = count($child);
foreach($child as $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;
}
}
?>

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。