Home  >  Article  >  Backend Development  >  关于递归算法的议论

关于递归算法的议论

WBOY
WBOYOriginal
2016-06-13 11:51:18864browse

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

<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>
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn