关于递归算法的讨论
小弟是还没毕业的学生,现在在实习做一个项目,又遇到了递归问题,希望大家帮助!
问题很简单,经典的递归遍历数组的问题
<br /><?php<br />$arr=array(<br />'0'=>array( 'id'=>'1','name'=>'角色管理','pid'=>'0',),<br />'1'=>array( 'id'=>'2','name'=>'添加角色','pid'=>'1',),<br />'2'=>array( 'id'=>'3','name'=>'角色列表','pid'=>'2',),<br />'3'=>array( 'id'=>'4','name'=>'菜单管理','pid'=>'0',),<br />'4'=>array( 'id'=>'5','name'=>'前台管理','pid'=>'4',),<br />'5'=>array( 'id'=>'6','name'=>'添加','pid'=>'5',),<br />'6'=>array( 'id'=>'7','name'=>'修改','pid'=>'5',),<br />'7'=>array( 'id'=>'8','name'=>'列表','pid'=>'5',),<br />'8'=>array( 'id'=>'9','name'=>'后台管理','pid'=>'4',),<br />'9'=>array( 'id'=>'10','name'=>'添加','pid'=>'9',),<br />'10'=>array( 'id'=>'11','name'=>'修改','pid'=>'9',),<br />'11'=>array( 'id'=>'12','name'=>'列表','pid'=>'9',),<br />);<br />?><br />
就是这个样子,递归遍历,要生成的有两个结果。
一个是标准的层级关系的数组
还有一个是用于放到下拉列表中的,

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

------解决方案--------------------
<br><?php <br />/**<br>* 通用的树型类,可以生成任何树型结构<br> */<br>header("content-type:text/html;charset=utf-8");<br>class tree {<br> /**<br> * 生成树型结构所需要的2维数组<br> * @var array<br> */<br> public $arr = array();<br><br> /**<br> * 生成树型结构所需修饰符号,可以换成图片<br> * @var array<br> */<br> public $icon = array('│','├','└');<br> public $nbsp = " ";<br><br> /**<br> * @access private<br> */<br> public $ret = '';<br><br> /**<br> * 构造函数,初始化类<br> * @param array 2维数组,例如:<br> * array(<br> * 1 => array('id'=>'1','parentid'=>0,'name'=>'一级栏目一'),<br> * 2 => array('id'=>'2','parentid'=>0,'name'=>'一级栏目二'),<br> * 3 => array('id'=>'3','parentid'=>1,'name'=>'二级栏目一'),<br> * 4 => array('id'=>'4','parentid'=>1,'name'=>'二级栏目二'),<br> * 5 => array('id'=>'5','parentid'=>2,'name'=>'二级栏目三'),<br> * 6 => array('id'=>'6','parentid'=>3,'name'=>'三级栏目一'),<br> * 7 => array('id'=>'7','parentid'=>3,'name'=>'三级栏目二')<br> * )<br> */<br> public function __construct($arr=array()){<br> $this->arr = $arr;<br> $this->ret = '';<br> return is_array($arr);<br> }<br><br> /**<br> * 得到父级数组<br> * @param int<br> * @return array<br> */<br> public function get_parent($myid){<br> $newarr = array();<br> if(!isset($this->arr[$myid])) return false;<br> $pid = $this->arr[$myid]['parentid'];<br> $pid = $this->arr[$pid]['parentid'];<br> if(is_array($this->arr))<br> {<br> foreach($this->arr as $id => $a)<br> {<br> if($a['parentid'] == $pid) $newarr[$id] = $a;<br> }<br> }<br> return $newarr;<br> }<br><br> /**<br> * 得到子级数组<br> * @param int<br> * @return array<br> */<br> public function get_child($myid)<br> {<br> $a = $newarr = array();<br> if(is_array($this->arr))<br> {<br> foreach($this->arr as $id => $a)<br> {<br> if($a['parentid'] == $myid) $newarr[$id] = $a;<br> }<br> }<br> return $newarr ? $newarr : false;<br> }<br><br> /**<br> * 得到当前位置数组<br> * @param int<br> * @return array<br> */<br> public function get_pos($myid,&$newarr)<br> {<br> $a = array();<br> if(!isset($this->arr[$myid])) return false;<br> $newarr[] = $this->arr[$myid];<br> $pid = $this->arr[$myid]['parentid'];<br> if(isset($this->arr[$pid]))<br> {<br> $this->get_pos($pid,$newarr);<br> }<br> if(is_array($newarr))<br> {<br> krsort($newarr);<br> foreach($newarr as $v)<br> {<br> $a[$v['id']] = $v;<br> }<br> }<br> return $a;<br> }<br><br> /**<br> * 得到树型结构<br> * @param int ID,表示获得这个ID下的所有子级<br> * @param string 生成树型结构的基本代码,例如:"<option>\$spacer\$name</option>"<br> * @param int 被选中的ID,比如在做树型下拉框的时候需要用到<br> * @return string<br> */<br> public function get_tree($myid, $str, $sid = 0, $adds = '', $str_group = '')<br> {<br> $number=1;<br> $child = $this->get_child($myid);<br> print_r($child);<br> if(is_array($child))<br> {<br> $total = count($child);<br> foreach($child as $id=>$value)<br> {<br> $j=$k='';<br> if($number==$total)<br> {<br> $j .= $this->icon[2]; //如果是最后一个子级使用└<br> }else<div class="clear"> </div>

PHP仍然流行的原因是其易用性、灵活性和强大的生态系统。1)易用性和简单语法使其成为初学者的首选。2)与web开发紧密结合,处理HTTP请求和数据库交互出色。3)庞大的生态系统提供了丰富的工具和库。4)活跃的社区和开源性质使其适应新需求和技术趋势。

PHP和Python都是高层次的编程语言,广泛应用于Web开发、数据处理和自动化任务。1.PHP常用于构建动态网站和内容管理系统,而Python常用于构建Web框架和数据科学。2.PHP使用echo输出内容,Python使用print。3.两者都支持面向对象编程,但语法和关键字不同。4.PHP支持弱类型转换,Python则更严格。5.PHP性能优化包括使用OPcache和异步编程,Python则使用cProfile和异步编程。

PHP主要是过程式编程,但也支持面向对象编程(OOP);Python支持多种范式,包括OOP、函数式和过程式编程。PHP适合web开发,Python适用于多种应用,如数据分析和机器学习。

PHP起源于1994年,由RasmusLerdorf开发,最初用于跟踪网站访问者,逐渐演变为服务器端脚本语言,广泛应用于网页开发。Python由GuidovanRossum于1980年代末开发,1991年首次发布,强调代码可读性和简洁性,适用于科学计算、数据分析等领域。

PHP适合网页开发和快速原型开发,Python适用于数据科学和机器学习。1.PHP用于动态网页开发,语法简单,适合快速开发。2.Python语法简洁,适用于多领域,库生态系统强大。

PHP在现代化进程中仍然重要,因为它支持大量网站和应用,并通过框架适应开发需求。1.PHP7提升了性能并引入了新功能。2.现代框架如Laravel、Symfony和CodeIgniter简化开发,提高代码质量。3.性能优化和最佳实践进一步提升应用效率。

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP类型提示提升代码质量和可读性。1)标量类型提示:自PHP7.0起,允许在函数参数中指定基本数据类型,如int、float等。2)返回类型提示:确保函数返回值类型的一致性。3)联合类型提示:自PHP8.0起,允许在函数参数或返回值中指定多个类型。4)可空类型提示:允许包含null值,处理可能返回空值的函数。


热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

Dreamweaver Mac版
视觉化网页开发工具

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。