首页 > 后端开发 > php教程 > 关于递归算法的议论

关于递归算法的议论

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
发布: 2016-06-13 11:51:18
原创
966 人浏览过

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

1

<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 />

登录后复制


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

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

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

1

2

3

4

5

6

<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>

登录后复制
相关标签:
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板