关于递归算法的讨论 递归算法遍历php指针 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 <?php/*** 通用的树型类,可以生成任何树型结构 */header("content-type:text/html;charset=utf-8");class tree { /** * 生成树型结构所需要的2维数组 * @var array */ public $arr = array(); /** * 生成树型结构所需修饰符号,可以换成图片 * @var array */ public $icon = array('│','├','└'); public $nbsp = " "; /** * @access private */ public $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'=>'三级栏目二') * ) */ public function __construct($arr=array()){ $this->arr = $arr; $this->ret = ''; return is_array($arr); } /** * 得到父级数组 * @param int * @return array */ public function get_parent($myid){ $newarr = array(); if(!isset($this->arr[$myid])) return false; $pid = $this->arr[$myid]['parentid']; $pid = $this->arr[$pid]['parentid']; if(is_array($this->arr)) { foreach($this->arr as $id => $a) { if($a['parentid'] == $pid) $newarr[$id] = $a; } } return $newarr; } /** * 得到子级数组 * @param int * @return array */ public function get_child($myid) { $a = $newarr = array(); if(is_array($this->arr)) { foreach($this->arr as $id => $a) { if($a['parentid'] == $myid) $newarr[$id] = $a; } } return $newarr ? $newarr : false; } /** * 得到当前位置数组 * @param int * @return array */ public function get_pos($myid,&$newarr) { $a = array(); if(!isset($this->arr[$myid])) return false; $newarr[] = $this->arr[$myid]; $pid = $this->arr[$myid]['parentid']; 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; } /** * 得到树型结构 * @param int ID,表示获得这个ID下的所有子级 * @param string 生成树型结构的基本代码,例如:"<option value=\$id \$selected>\$spacer\$name</option>" * @param int 被选中的ID,比如在做树型下拉框的时候需要用到 * @return string */ public function get_tree($myid, $str, $sid = 0, $adds = '', $str_group = '') { $number=1; $child = $this->get_child($myid); print_r($child); if(is_array($child)) { $total = count($child); foreach($child as $id=>$value) { $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($value);//此方法为下面的字符变量赋上相应的键值 $nstr,$str_group $parentid == 0 && $str_group ? eval("\$nstr = \"$str_group\";") : eval("\$nstr = \"$str\";"); $this->ret .= $nstr; $nbsp = $this->nbsp; $this->get_tree($id, $str, $sid, $adds.$k.$nbsp,$str_group); //如果子集是数组,递归调用 $number++; } } return $this->ret; }}$arr= array( 1 => array('id'=>'1','parentid'=>0,'name'=>'世界'), 3 => array('id'=>'3','parentid'=>1,'name'=>'中国'), 4 => array('id'=>'4','parentid'=>1,'name'=>'美国'), 5 => array('id'=>'5','parentid'=>3,'name'=>'湖南'), 6 => array('id'=>'6','parentid'=>3,'name'=>'北京'), 7 => array('id'=>'7','parentid'=>4,'name'=>'纽约'), 7 => array('id'=>'7','parentid'=>5,'name'=>'长沙') );$tree = new tree($arr);$str = "<ul value=\$id \$selected>\$spacer\$name</ul>";echo $tree->get_tree(0,$str);?> 怎样将文件夹中的文件分类读出写入数据库 怎么删除字符串中的英文字母?? 求一个PHP开发的停车长管理系统的 源码 来学习学习 php+mysql+apache怎么下载和配置啊? ImageMagick 如何在 php5.2.8 上安装 为了PHPBB? 一个关于ubuntu 配置ip的问题 求一个政府门户 会PHP文件解密的,帮我看看一个文件能不能解破 数组添加至数据库 wampserver安装问题 求助在linux下给php安装memcache扩展,没加载上 Linux系统下安装php5.5.6时候,提示缺少libxml2.config
<?php
/**
* 通用的树型类,可以生成任何树型结构
*/
header("content-type:text/html;charset=utf-8");
class tree {
/**
* 生成树型结构所需要的2维数组
* @var array
*/
public $arr = array(); /**
* 生成树型结构所需修饰符号,可以换成图片
* @var array
*/
public $icon = array('│','├','└');
public $nbsp = " "; /**
* @access private
*/
public $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'=>'三级栏目二')
* )
*/
public function __construct($arr=array()){
$this->arr = $arr;
$this->ret = '';
return is_array($arr);
} /**
* 得到父级数组
* @param int
* @return array
*/
public function get_parent($myid){
$newarr = array();
if(!isset($this->arr[$myid])) return false;
$pid = $this->arr[$myid]['parentid'];
$pid = $this->arr[$pid]['parentid'];
if(is_array($this->arr))
{
foreach($this->arr as $id => $a)
{
if($a['parentid'] == $pid) $newarr[$id] = $a;
}
}
return $newarr;
} /**
* 得到子级数组
* @param int
* @return array
*/
public function get_child($myid)
{
$a = $newarr = array();
if(is_array($this->arr))
{
foreach($this->arr as $id => $a)
{
if($a['parentid'] == $myid) $newarr[$id] = $a;
}
}
return $newarr ? $newarr : false;
} /**
* 得到当前位置数组
* @param int
* @return array
*/
public function get_pos($myid,&$newarr)
{
$a = array();
if(!isset($this->arr[$myid])) return false;
$newarr[] = $this->arr[$myid];
$pid = $this->arr[$myid]['parentid'];
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;
} /**
* 得到树型结构
* @param int ID,表示获得这个ID下的所有子级
* @param string 生成树型结构的基本代码,例如:"<option value=\$id \$selected>\$spacer\$name</option>"
* @param int 被选中的ID,比如在做树型下拉框的时候需要用到
* @return string
*/
public function get_tree($myid, $str, $sid = 0, $adds = '', $str_group = '')
{
$number=1;
$child = $this->get_child($myid);
print_r($child);
if(is_array($child))
{
$total = count($child);
foreach($child as $id=>$value)
{
$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($value);//此方法为下面的字符变量赋上相应的键值 $nstr,$str_group
$parentid == 0 && $str_group ? eval("\$nstr = \"$str_group\";") : eval("\$nstr = \"$str\";");
$this->ret .= $nstr;
$nbsp = $this->nbsp;
$this->get_tree($id, $str, $sid, $adds.$k.$nbsp,$str_group); //如果子集是数组,递归调用
$number++;
}
}
return $this->ret;
}
}
$arr= array(
1 => array('id'=>'1','parentid'=>0,'name'=>'世界'),
3 => array('id'=>'3','parentid'=>1,'name'=>'中国'),
4 => array('id'=>'4','parentid'=>1,'name'=>'美国'),
5 => array('id'=>'5','parentid'=>3,'name'=>'湖南'),
6 => array('id'=>'6','parentid'=>3,'name'=>'北京'),
7 => array('id'=>'7','parentid'=>4,'name'=>'纽约'),
7 => array('id'=>'7','parentid'=>5,'name'=>'长沙')
);
$tree = new tree($arr);
$str = "<ul value=\$id \$selected>\$spacer\$name</ul>";
echo $tree->get_tree(0,$str);?>