在开发过程中经常会遇到分级场景,如菜单分级、评论、商品类型分级等;在同一张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; unt($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; unt($menulist[$index]); } } if安徽艺考 (! empty($tree['children'])) { $this->getmenutree($tree['children'], $menulist); } el { // 递归临界点 return fal; } } }}$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,'pare十一短信祝福nt_id' => 1, 'name' => '节点1-2'],];$treelist 揭阳化工项目概念性规划设计文本编写标准= [];(new menu)->getmenutree($treelist, $menulist);print_r($treelist);
happy coding!
每一个不曾起舞的日子,都是对生命的辜负 ^-^
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对www.887551.com的支持。
本文发布于:2023-04-07 14:13:45,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/6b16ccb88121aec29cf186c0e9b6e3c7.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:php菜单/评论数据递归分级算法的实现方法.doc
本文 PDF 下载地址:php菜单/评论数据递归分级算法的实现方法.pdf
留言与评论(共有 0 条评论) |