php递归如何获取无限上级ID

吾爱主题 阅读:138 2022-11-20 16:50:00 评论:0

php递归获取无限上级ID

数据库结构

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 CREATE TABLE `fcxlt_authuser` (    `id` int (11) NOT NULL AUTO_INCREMENT,    `username` varchar (50) NOT NULL COMMENT '用户名' ,    ` password ` varchar (64) NOT NULL COMMENT '密码' ,    `nickname` varchar (50) NOT NULL COMMENT '昵称' ,    `phone` varchar (20) DEFAULT NULL COMMENT '电话' ,    `weixin_id` varchar (20) DEFAULT NULL COMMENT '微信号' ,    `qrcode` varchar (200) DEFAULT NULL COMMENT '二维码Base64' ,    `auth_id` int (11) NOT NULL ,    `is_authed` int (11) NOT NULL ,    `createtime` int (11) NOT NULL DEFAULT '1523156898' ,    PRIMARY KEY (`id`),    KEY `nickname` (`nickname`),    KEY `auth_id` (`auth_id`,`id`,`username`,`nickname`) USING BTREE,    KEY `username` (`username`,`is_authed`,` password `) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=103 DEFAULT CHARSET=utf8mb4

其中auth_id是上级ID,无限分级

递归代码

注意:在引用递归函数本身的时候,一定要return $this->递归函数,否则返回NULL

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 public function getWinfo( $id , $res = '' ){          if ( $id >1){              $infos = Db::name( 'authuser' )                  ->alias( 'a' )                  ->where( 'a.id' , $id )                  ->join( 'fcxlt_authuser b' , 'a.auth_id=b.id' , 'LEFT' )                  ->field( 'a.auth_id as id' )                  ->find(); //        dump($infos);              if (! empty ( $infos ) && $infos [ 'id' ]>1){                  $res .= $infos [ 'id' ]. "," ;                  return $this ->getWinfo( $infos [ 'id' ], $res );              } else {                  return $res ;              }          } else {              return $res ;          }      }

控制器调用

?
1 2 3 $ids = $this ->getWinfo( $id , $res = $id . ',' ); $id_in substr ( $ids ,0, strlen ( $ids )-1); $id_arr = explode ( ',' , $id_in );

php无限极分类(递归)

建表的时候,增加一个PID字段用来区别自己所属的分类

id pid name
1 0 汽车
2 1 欧拉
3 1 吉利
4 3 沃尔沃
5 1 大众

代码

?
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 44 /**       * 递归实现无限极分类       * @param $array 分类数据       * @param $pid 父ID       * @param $level 分类级别       * @return $list 分好类的数组 直接遍历即可 $level可以用来遍历缩进       */ function getTree( $array , $pid =0, $level = 0){          //声明静态数组,避免递归调用时,多次声明导致数组覆盖          static $list = [];          foreach ( $array as $key => $value ){              //第一次遍历,找到父节点为根节点的节点 也就是pid=0的节点              if ( $value [ 'pid' ] == $pid ){                  //父节点为根节点的节点,级别为0,也就是第一级                  $value [ 'level' ] = $level ;                  //把数组放到list中                  $list [] = $value ;                  //把这个节点从数组中移除,减少后续递归消耗                  unset( $array [ $key ]);                  //开始递归,查找父ID为该节点ID的节点,级别则为原级别+1                  getTree( $array , $value [ 'id' ], $level +1);              }          }          return $list ;      }      /*       * 获得递归完的数据,遍历生成分类       */      $array = getTree( $array );      foreach ( $array ) as $value {         echo str_repeat ( '--' , $value [ 'level' ]), $value [ 'name' ]. '<br />' ;      } //输出结果 无限极分类实现ok /** 河北省 --邯郸市 ----永年区 --武安市 北京市 --朝阳区 ----望京 ----酒仙桥 --通州区 **/

PHP null转成空字符串

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 public function convertNullToEmptyString( $data ) {      $data = collect( $data )->map( function ( $value ){          if ( is_null ( $value )) {              return '' ;          }          return is_array ( $value ) ? $this ->convertNullToEmptyString( $value ) : $value ;      });      return $data ->toArray(); } $data = array (      [          'name' => 'shawn' ,          'email' => 'shw@qq.com' ,          'company' => 'aa'      ],      [          'name' => '111' ,          'email' => 'ssdfas@dasf' ,          'company' => 'ssdfa'      ] ); var_dump( $this ->convertNullToEmptyString( $data )); die ;

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/u013252962/article/details/99735588

可以去百度分享获取分享代码输入这里。
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

【腾讯云】云服务器产品特惠热卖中
搜索
标签列表
    关注我们

    了解等多精彩内容