• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

关于递归算法的议论

php 搞代码 3年前 (2022-01-24) 23次浏览 已收录 0个评论

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

<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 => <i>1本文来#源gaodai$ma#com搞$代*码*网</i><pre>搞代gaodaima码

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 生成树型结构的基本代码,例如:”\$spacer\$name”
* @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


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于递归算法的议论

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址