时间:2021-05-26
在开发过程中经常会遇到分级场景,如菜单分级、评论、商品类型分级等;在同一张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: [] ] ]];算法代码如下:
<?phpclass Menu{ /** * 递归循环菜单列表, 转化为菜单树 * @param $treeList 菜单树列表 * @param $menuList 菜单列表 * @return bool */ public function getMenuTree(&$treeList, $menuList) { // 初始化顶级父节点 if (! count($treeList)) { foreach($menuList as $index => $menu) { if ($menu['parent_id'] == 0) { $treeList[] = $menu; unset($menuList[$index]); } } } // 递归查找子节点 foreach ($treeList as &$tree) { foreach ($menuList as $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 { // 递归临界点 return false; } } }}$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 = [];(new Menu)->getMenuTree($treeList, $menuList);print_r($treeList);happy coding!
每一个不曾起舞的日子,都是对生命的辜负 ^-^
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了基于递归实现的php树形菜单代码。分享给大家供大家参考。具体实现方法如下:开发电子商务网站的时候,做了这个显示树形菜单的功能,用的递归实现的PHP
递归算法是一种直接或者间接调用自身函数或者方法的算法。Java递归算法是基于Java语言实现的递归算法。递归算法的实质是把问题分解成规模缩小的同类问题的子问题,
前言在数据结构算法设计中,或者一个方法的具体实现的时候,有一种方法叫做“递归”,这种方法在思想上并不是特别难,但是实现起来还是有一些需要注意的。虽然对于很多递归
方法一:递归算法//////一列数的规则如下:1、1、2、3、5、8、13、21、34求第30位数是多少,用递归算法实现。(C#语言)/////////publ
本文实例讲述了JS尾递归的实现方法及代码优化技巧。分享给大家供大家参考,具体如下:在学习数据结构和算法的时候,我们都知道所有的递归都是可以优化成栈+循环的。对于