首页 » PHP教程 » php终止递归技巧_递归教程一份可疑的暧昧名单

php终止递归技巧_递归教程一份可疑的暧昧名单

访客 2024-12-05 0

扫一扫用手机浏览

文章目录 [+]

(核心思路:递归有去有回)

官方解释

递归函数即自调用函数,也便是函数在函数体内部直接或间接地自己调用自己。
须要把稳的是利用递归函数时常日会在函数体中附加一个判断条件,以判断是否须要连续实行递归调用,当条件知足时会终止函数的递归调用。

php终止递归技巧_递归教程一份可疑的暧昧名单

背景解释

溘然的一天,现任女友创造你还和以前的一些女性朋友保持联系,并且找到了一份证据摆到你的面前,让你阐明一下你跟他们之间的关系,干系证据如下:

php终止递归技巧_递归教程一份可疑的暧昧名单
(图片来自网络侵删)

<?php$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' =>'同学' ]]; 干系证人

现任女友严厉发话了,你自己交代后果可能会好一点,要不然她就要去问下面这个证人朋友了:

<?phpgetMenu($menus_main,$parent_id=0,$sub='children',$level=1){ $data = array(); foreach($menus_main as $key=>$val){ if($val['parent_id']==$parent_id){ $val['level']=$level; $val[$sub]=$this->getMenu($menus_main,$val['id'],$sub,$level+1); $data[] = $val; } } return $data; } 主动交代

以下是这些名单的关系图谱,目前已经一头冷汗了

回顾一下细节吧

现任哀求你讲述一下跟这些人的认识细节,已经证据确切了,就别硬撑了

把刚才那个证人来过来一起回顾一下,经由谈论,确定了一个思路,如下:

<?php//出处:https://www.dongyao.ren/function getMenu($menus_main,$pid=0,$sub='children',$level=1,$name = '主栏目'){ $data = array(); foreach($menus_main as $key=>$val){ echo "正在第".$level."层排查第".$val['id']."号人物(Pid:".$val['pid']."):<span style='color:red'><b>".$val['name']."</b></span>属于【".$name."】---此时data值".json_encode($data,JSON_UNESCAPED_UNICODE); if($val['pid']==$pid){ echo "<span style='color:green'>:证据确切,连续排查".($level+1)."层</span><hr>"; $val['level']=$level; // unset($menus_main[$key]); $val[$sub]=getMenu($menus_main,$val['id'],$sub,$level+1,$val['name']); $data[] = $val; }else{ if($val['id'] == $pid){ echo "<span style='color:red'>---条件不知足【自己查自己】,开始返回---</span><hr>"; }else{ echo "<span style='color:red'>---条件不知足【不是同一类】,开始返回---</span><hr>"; } } } return $data;}

得到了详细的谈天过程如下:

……还有好多没列出来

内容过多,一口气说不完,说重点

干系过程

对照关系图谱和这一份谈天记录可以看到:

由于过程比较紧张,手抖画的图,大概意思便是这么一个简化图

首先对号人物前女友进行排查,确定这是个大号人物。
此时由于不愿定这个大人物下面还有没有其他干系人物,以是,先放在待定区`此时$data变量还未赋值`!
第二轮便是排查所有人是不是都跟`前女友`有关系,一个一个鞠问之后,暂时打消无关职员; 刚开始就遇上自己查自己的情形,跳过,该人物第一步已经确定了 第二位`二毛`进入视线了,确定跟`前女友`有关,知足调查条件,此时`二毛后面的职员,先原地等待不要动,等查完二毛再处理` 此时进入调查`二毛`的关系链事情中,连续把8位关键人物拉过来,讯问是否跟二毛有关系 问到`小红`这里,创造小红是`二毛`的孩子,<b>知足调查条件</b>, 连续把8位关键人物拉过来,讯问是否跟`小红`有关系 创造没有人跟小红有关系了,此时就把`小红`是`二毛`孩子的信息标记到$data变量当中

到这一步,个中一条关系链已经调查打消,赋值$data,当前只有小红一人被标记赋值,当前其他关系链的干系人物还在等待调查,连续往下看:

回过分去,连续到上次中断调查的位置,从`小红`今后连续调查,然后创造了`小绿`也是`二毛`的孩子,后续事情跟`小红`一样。
得出`小绿`没有关联人物了,退出当前关系链,将调查结果追加到上一步的后面

此时,$data变量当中包含两个人物了,有小红,还有小绿,后续事情连续

回到上次中断的位置,$data当前包含二毛和两个孩子的总信息,然后连续从`二毛`后面调查,创造`大毛`也是`前女友`阵营的,后续关系链调查跟二毛一样:

一圈调查下来,创造大毛还算大略,没有孩子,结束对他的调查,把大毛的调查结果,记录在$data当中,此时data变量包含了大毛和二毛,以及他们的孩子关系信息。

……

后续其他关系链的逻辑同上,反反复复,一个一个的鞠问调查,创造可疑就暂时中断,后续的,顺着可疑职员排查下去,排查完之后,登记排查结果,回过分再来从中断位置连续深挖下去,如此反复。

证据链

下方是本次过程的所有代码,各位可以自行实行参阅

<?php//出处:https://www.dongyao.ren/function getMenu($menus_main,$pid=0,$sub='children',$level=1,$name = '主栏目'){ $data = array(); foreach($menus_main as $key=>$val){ echo "正在第".$level."层排查第".$val['id']."号人物(Pid:".$val['pid']."):<span style='color:red'><b>".$val['name']."</b></span>属于【".$name."】---此时data值".json_encode($data,JSON_UNESCAPED_UNICODE); if($val['pid']==$pid){ echo "<span style='color:green'>:证据确切,连续排查".($level+1)."层</span><hr>"; $val['level']=$level; // unset($menus_main[$key]); $val[$sub]=getMenu($menus_main,$val['id'],$sub,$level+1,$val['name']); $data[] = $val; }else{ if($val['id'] == $pid){ echo "<span style='color:red'>---条件不知足【自己查自己】,开始返回---</span><hr>"; }else{ echo "<span style='color:red'>---条件不知足【不是同一类】,开始返回---</span><hr>"; } } } 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;

标签:

相关文章

ansiblenginxphp技巧_Shell变量篇

小编Shell变量Shell变量定义变量的概述什么是变量?​数据的一种通报办法。用一个固定的字符串去表示一个不固定的字符串,数值,...

PHP教程 2024-12-07 阅读0 评论0