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

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

发布于 2014-12-29 19:34:34 | 173 次阅读 | 评论: 0 | 来源: 网友投递

PHP开源脚本语言PHP(外文名: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,入门门槛较低,易于学习,使用广泛,主要适用于Web开发领域。PHP的文件后缀名为php。

本文是一个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 生成树形结构基本代码, 例如: "$spacer$name"

* @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;

}

}

?>

相关阅读:

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

php FLEA中二叉树数组的遍历输出

PHP无限分类(树形类)示例代码

php无限分类且支持输出树状图的示例

PHP编码转换函数 自动转换字符集支持数组转换

支持数组的ADDSLASHES的php函数

php 无限分类的树类代码

PHP如何通过传引用的思想实现无限分类(代码简单)

php 无限分类 树形数据格式化代码

要求实现一个7个元素的数组,取出这个数组中的5个元素,生成新的数组,这些数组是唯一的

PHP实现二维/三维数组转字符串示例

php addslashes 利用递归实现数组反斜线引用字符串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值