PHP数组转树形结构,获取任意子节点的全部父节点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | /** * 递归无限级分类,获取任意节点下所有子孩子 * @param array $arr * @param int|string $pid 父级节点 * @param string $p_name 父级节点名称 * @param int $level 层级数 * @return array */ function get_tree_all_children( array $arr , int|string $pid = 0, string $p_name = 'pid' , int $level = 0): array { $data = array (); foreach ( $arr as $k => $v ) { if ( $v [ $p_name ] == $pid ) { $arr [ $k ][ 'level' ] = $level ; $data [] = $arr [ $k ]; $data = array_merge ( $data , get_tree_all_children( $arr , $v [ 'id' ], $p_name , $level + 1)); } } return $data ; } /** * 递归无限级分类,获取任意节点的所有父级 * @param array $arr 数据 * @param int|string $id 节点 * @param string $p_name 父级节点名称 * @param int $level 层级数 * @return array */ function get_tree_all_parent( array $arr , int|string $id = 0, string $p_name = 'pid' , int $level = 0): array { $data = array (); foreach ( $arr as $k => $v ) { if ((int) $id === (int) $v [ 'id' ]) { $arr [ $k ][ 'level' ] = $level ; $data [] = $arr [ $k ]; $data = array_merge ( $data , get_tree_all_parent( $arr , (int) $v [ $p_name ], $p_name , $level - 1)); } } $last_names = array_column( $data , 'level' ); array_multisort ( $last_names , SORT_ASC, $data ); return $data ; } |
标签:
PHP
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析