0

0

关于递归算法的议论

php中文网

php中文网

发布时间:2016-06-13 11:51:18

|

1024人浏览过

|

来源于php中文网

原创

关于递归算法的讨论
小弟是还没毕业的学生,现在在实习做一个项目,又遇到了递归问题,希望大家帮助!
问题很简单,经典的递归遍历数组的问题


$arr=array(
'0'=>array( 'id'=>'1','name'=>'角色管理','pid'=>'0',),
'1'=>array( 'id'=>'2','name'=>'添加角色','pid'=>'1',),
'2'=>array( 'id'=>'3','name'=>'角色列表','pid'=>'2',),
'3'=>array( 'id'=>'4','name'=>'菜单管理','pid'=>'0',),
'4'=>array( 'id'=>'5','name'=>'前台管理','pid'=>'4',),
'5'=>array( 'id'=>'6','name'=>'添加','pid'=>'5',),
'6'=>array( 'id'=>'7','name'=>'修改','pid'=>'5',),
'7'=>array( 'id'=>'8','name'=>'列表','pid'=>'5',),
'8'=>array( 'id'=>'9','name'=>'后台管理','pid'=>'4',),
'9'=>array( 'id'=>'10','name'=>'添加','pid'=>'9',),
'10'=>array( 'id'=>'11','name'=>'修改','pid'=>'9',),
'11'=>array( 'id'=>'12','name'=>'列表','pid'=>'9',),
);
?>


就是这个样子,递归遍历,要生成的有两个结果。
一个是标准的层级关系的数组
还有一个是用于放到下拉列表中的,

另外,我查资料,发现还能用指针,学生道行尚浅,请各位多多指教!!!

------解决方案--------------------


/**
* 通用的树型类,可以生成任何树型结构
 */
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 生成树型结构的基本代码,例如:""
* @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

相关专题

更多
php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

0

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

0

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

2

2025.12.31

不受国内限制的浏览器大全
不受国内限制的浏览器大全

想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

6

2025.12.31

出现404解决方法大全
出现404解决方法大全

本专题整合了404错误解决方法大全,阅读专题下面的文章了解更多详细内容。

18

2025.12.31

html5怎么播放视频
html5怎么播放视频

想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。

3

2025.12.31

关闭win10系统自动更新教程大全
关闭win10系统自动更新教程大全

本专题整合了关闭win10系统自动更新教程大全,阅读专题下面的文章了解更多详细内容。

2

2025.12.31

阻止电脑自动安装软件教程
阻止电脑自动安装软件教程

本专题整合了阻止电脑自动安装软件教程,阅读专题下面的文章了解更多详细教程。

1

2025.12.31

html5怎么使用
html5怎么使用

想快速上手HTML5开发?本合集为你整理最实用的HTML5使用指南!涵盖HTML5基础语法、主流框架(如Bootstrap、Vue、React)集成方法,以及无需安装、直接在线编辑运行的平台推荐(如CodePen、JSFiddle)。无论你是新手还是进阶开发者,都能轻松掌握HTML5网页制作、响应式布局与交互功能开发,零配置开启高效前端编程之旅!

2

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
AngularJS教程
AngularJS教程

共24课时 | 2.2万人学习

CSS3实现按钮特效视频教程
CSS3实现按钮特效视频教程

共15课时 | 3.2万人学习

细说PHP第三季
细说PHP第三季

共58课时 | 11.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号