当前位置: 首页 > 后端技术 > Python

RecursiveTutorial-Asuspectedambiguouslist

时间:2023-03-26 19:04:33 Python

最近处理了一个无限分类的数据,主要是用了一个递归函数。当然laravel有更优雅的查询关联方式,但是因为数据需要很多其他的二次修改,所以采用了原来的递归处理,同时用一个形象的比喻来解释递归的原理:(核心思想:递归有去有回)官方的描述是递归函数是自调用函数,即函数在函数体内部直接或间接调用自己。需要注意的是,在使用递归函数时,通常会在函数体中加入判断条件,判断是否需要继续递归调用。当条件满足时,函数的递归调用将终止。背景描述突然有一天,你现在的女朋友发现你和你以前的一些女性朋友还有联系,并在你面前找到了一份证据,要你解释和她们的关系。相关证据如下:1,'pid'=>0,'name'=>'前女友'],['id'=>2,'pid'=>1,'name'=>'二毛'],['id'=>3,'pid'=>0,'name'=>'可疑人员'],['id'=>4,'pid'=>2,'name'=>'小红'],['id'=>5,'pid'=>2,'name'=>'小绿'],['id'=>6,'pid'=>3,'name'=>'同事'],['id'=>7,'pid'=>1,'name'=>'大毛'],['id'=>8,'pid'=>3,'name'=>'同学']];相关证人的现任女友出言不逊。自己解释可能更好,不然她会问下面的证友:$val){if($val['parent_id']==$parent_id){$val['level']=$level;$val[$sub]=$this->getMenu($menus_main,$val['id'],$sub,$level+1);$数据[]=$val;}}返回$数据;}主动说明一下,下面是这些列表的关系图,我已经是一身冷汗了。让我回忆一下细节。任职者请您详细介绍一下您与这些人的相识情况。既然证据确凿,就不要再等了。让目击者过来一起回忆。经过讨论,确定了一个思路,如下:=1,$name='主列'){$data=array();foreach($menus_mainas$key=>$val){echo"调查人员".$val['id']."atlevel".$level."(Pid:".$val['pid']."):".$val['name']."属于[".$name."]---数据值在这次“.json_encode($data,JSON_UNESCAPED_UNICODE);if($val['pid']==$pid){echo":证据确凿,继续调查。".($level+1)."Layer";$val['level']=$level;//取消设置($menus_main[$key]);$val[$sub]=getMenu($menus_main,$val['id'],$sub,$level+1,$val['name']);$数据[]=$val;}else{if($val['id']==$pid){echo"---条件不满足【自己检查】,开始返回---";}else{echo"---条件不满足【非同一类别】,开始返回---


";}}}return$data;}具体聊天过程如下:...还有很多东西没有列出来,内容太多,一口气说不完。对比关系图和这段聊天记录可以看出关键的相关过程:由于过程紧张,握手画的图大概就是这么简化的意思图中,先查大人物的前女友,还有确保这是一个大角色。这个时候因为不确定这个大字下面有没有其他相关的人,所以先放到pending区,$data变量还没有赋值呢!第二轮是查大家有没有跟前女友有关系。一一审讯后,暂时排除无关人员;一开始遇到自己查的情况就跳过了。人的第一步,已经确定了第二位。二毛现身,经确认与前女友有关,符合调查条件。这时候,二毛身后的人员就应该在原地等候,不要动弹。角色靠边停车,询问他们是否与二毛有关。这边问小红,发现小红是二毛的孩子,符合调查条件,继续把8个关键人物拉过来,问他们和小红有没有关系,发现没有人和小红有关系。此时将小红是二毛的信息标记到$data变量中。至此,其中一条关系链已经查清,分配了$data。目前只有小红被标记分配。目前,其他关系链的相关人员还在等待调查,继续往下看:回头,继续上次中断调查的位置,继续从小红开始调查,然后发现小鹿也是二毛的孩子,后续工作同小红。发现小鹿没有关联人,退出当前关系链,将调查结果追加到上一步的末尾。此时$data变量包含两个字符,有小红和小鹿,后续工作继续回到上次中断的位置,$data当前包含二毛和两个孩子的大概信息,然后从二毛背后继续追查,发现大毛也是前女友阵营的人。后续的关系链调查和二猫一样:经过一轮调查,发现大猫很简单,没有孩子,对他的调查结束,大猫的调查结果记录在$数据。此时数据变量中包含了大毛和二毛,以及他们的孩子的关系信息。...其他后续关系链的逻辑同上。周而复始,一项一项的审问调查,发现可疑,便暂时中断。跟进,跟踪可疑人员排查。继续深入挖掘,等等。证据链下面是这个过程的所有代码,你可以自己执行。参考$val){echo"正在检查".$level."级别"。$val['id'].“人物(Pid:”.$val['pid'].”):”.$val['name']。"属于[".$name."]---此时的数据值".json_encode($data,JSON_UNESCAPED_UNICODE);if($val['pid']==$pid){echo":证据确凿,继续调查".($level+1)."图层<小时>”;$val['level']=$level;//取消设置($menus_main[$key]);$val[$sub]=getMenu($menus_main,$val['id'],$sub,$level+1,$val['name']);$数据[]=$val;}else{if($val['id']==$pid){echo"---条件不满足【自己检查】,开始返回---";}else{echo"
";}}}return$data;}$arr=[['id'=>1,'pid'=>0,'name'=>'前女友'],['id'=>2,'pid'=>1,'name'=>'二毛'],['id'=>3,'pid'=>0,'name'=>'可疑人员'],['id'=>4,'pid'=>2,'name'=>'小红'],['id'=>5,'pid'=>2,'name'=>'小绿'],['id'=>6,'pid'=>3,'name'=>'同事'],['id'=>7,'pid'=>1,'name'=>'大毛'],['id'=>8,'pid'=>3,'name'=>'同学']];getMenu($arr);return;AD欢迎来到博客:https://www.dongyao.ren