为了账号安全,请及时绑定邮箱和手机立即绑定

怎么解决for循环调用递归函数时,数据包含上一条数据记录??

怎么解决for循环调用递归函数时,数据包含上一条数据记录??

慕森卡 2019-05-25 15:23:52
functiongetchild($pid){static$arr;$list="select*fromtablewhereparent_id=$pid";foreach($listas$k=>$v){$arr[]=$list[$k];getchild($v['comment_id']);}return$arr;}functionget_comment_list(){$comment_list="select*tablewhereparent_id=0";foreach($comment_listas$k=>$v){$child_comments=getchild($v['comment_id']);//递归取出父评论下所有的子评论$comment_list[$k]['childs']=$child_comments;}}循环调用getchild($pid)这个递归的时候,每条父评论下的子评论会把前一条父评论的子评论包含进来,这个怎么解决啊?我知道是由于static$arr;静态变量的原因。但是由于业务需要我需要取出这样的数据结构,就是做一个类似本站的回复的需求。把每条父评论下所有的子评论取出来。但是上面的做法,出现了,下一条父评论的子评论包含了上一条的子评论数据。有什么办法可以解决这个问题!!!
查看完整描述

2 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

把static$arr;
放到函数外面
然后在
$comment_list[$k]['childs']=$child_comments;
下面加一句
$arr=[];//清空之前的数据
                            
查看完整回答
反对 回复 2019-05-25
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

又是递归又是static有点晕。
$arr[]=$list[$k];
getchild($v['comment_id]);
改成
$arr[$v['comment_id]]=getchild($v['comment_id]);
这样不行吗
                            
查看完整回答
反对 回复 2019-05-25
  • 2 回答
  • 0 关注
  • 675 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信