php菜单/评论数据递归分级算法的实现方法
在开发过程中经常会遇到分级场景,如菜单分级、评论、商品类型分级等;在同一张mysql数据表中可能设计单表结构,如同如下数据:
$menuList=[ ['id'=>1,'parent_id'=>0,'name'=>'节点1'], ['id'=>2,'parent_id'=>1,'name'=>'节点1-1'], ['id'=>3,'parent_id'=>0,'name'=>'节点2'], ['id'=>4,'parent_id'=>3,'name'=>'节点2-1'], ['id'=>5,'parent_id'=>2,'name'=>'节点1-1-1'], ['id'=>6,'parent_id'=>1,'name'=>'节点1-2'], ];
这时候在处理展示过程就需要将上面的结构转换为更加直观的数据结构,形如:
$treeList=[ [ children:[ children:[] ] ] [, children:[ children:[] ] ] ];
算法代码如下:
$menu){ if($menu['parent_id']==0){ $treeList[]=$menu; unset($menuList[$index]); } } } //递归查找子节点 foreach($treeListas&$tree){ foreach($menuListas$index=>$menu){ if(empty($tree['children'])){ $tree['children']=[]; } if($menu['parent_id']==$tree['id']){ $tree['children'][]=$menu; unset($menuList[$index]); } } if(!empty($tree['children'])){ $this->getMenuTree($tree['children'],$menuList); }else{ //递归临界点 returnfalse; } } } } $menuList=[ ['id'=>1,'parent_id'=>0,'name'=>'节点1'], ['id'=>2,'parent_id'=>1,'name'=>'节点1-1'], ['id'=>3,'parent_id'=>0,'name'=>'节点2'], ['id'=>4,'parent_id'=>3,'name'=>'节点2-1'], ['id'=>5,'parent_id'=>2,'name'=>'节点1-1-1'], ['id'=>6,'parent_id'=>1,'name'=>'节点1-2'], ]; $treeList=[]; (newMenu)->getMenuTree($treeList,$menuList); print_r($treeList);
happycoding!
每一个不曾起舞的日子,都是对生命的辜负^-^
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。