php 关于递归回调的问题

每天进步一点点e 2018-03-19 06:30:18
有一个会员数组 16的上级为13,13的上级为1,17 的上级为13, 找16,17 的关系链,找到1为止,想到一个递归的方法,但是实现起来达不到理想的效果,大家有更好的方法吗?,数组大小长短是不确定的


error_reporting(0);
//会员递归得到层级关系
function user_tier($arr,$k){
static $return_arr;
if($arr[$k]!=1){
$return_arr[$k] = $arr[$k];
user_tier($arr,$arr[$k]);
}else{
$return_arr[$k] = $arr[$k];
}
return $return_arr;
}


$test = array(
array('id'=>16,'pid'=>13),
array('id'=>13,'pid'=>1),
array('id'=>17,'pid'=>13)
);

$test3 = array();
foreach($test as $k=>$v){
$test3[$v['id']] = $v['pid'];
}
$test2 = array(16,17);



foreach($test2 as $k=>$v){
$guanxi[] = user_tier($test3,$v);
}

/*
得到效果如下
[0] => Array
(
[16] => 13
[13] => 1
)

[1] => Array
(
[16] => 13
[13] => 1
[17] => 13
)


目标效果
[0] => Array
(
[16] => 13
[13] => 1
)

[1] => Array
(
[17] => 13
[13] => 1

)
*/





...全文
345 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 3 楼 xuzuning 的回复:
不处理返回值?那调用函数干什么?
昨天想明白发了 这样写就没问题了
//递归找到上级
function user_tier2($arr,$val,$myarr){    
 	$p_id = $arr[$val];
	$myarr[$val] = $p_id;
	if($p_id == 1){
		return $myarr;
	}else{
		return user_tier2($arr,$p_id,$myarr);
	}	
}
xuzuning 2018-03-20
  • 打赏
  • 举报
回复
不处理返回值?那调用函数干什么?
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
$guanxi[] = user_tier($test3,$v); //这里用到了返回值 function user_tier($arr,$k){ static $return_arr; if($arr[$k]!=1){ $return_arr[$k] = $arr[$k]; user_tier($arr,$arr[$k]); //为何这里不处理返回值呢? }else{ $return_arr[$k] = $arr[$k]; } return $return_arr; //这里有返回 }
最后处理返回值 是因为要从16开始 一直找到1 把中间所有的数都放到数组里返回
xuzuning 2018-03-19
  • 打赏
  • 举报
回复
$guanxi[] = user_tier($test3,$v); //这里用到了返回值 function user_tier($arr,$k){ static $return_arr; if($arr[$k]!=1){ $return_arr[$k] = $arr[$k]; user_tier($arr,$arr[$k]); //为何这里不处理返回值呢? }else{ $return_arr[$k] = $arr[$k]; } return $return_arr; //这里有返回 }

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧