最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

php遞歸如何獲取無(wú)限上級(jí)ID

 更新時(shí)間:2022年09月06日 17:15:43   作者:何憂非喜{傲嬌的程序媛}  
這篇文章主要介紹了php遞歸如何獲取無(wú)限上級(jí)ID,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

php遞歸獲取無(wú)限上級(jí)ID

數(shù)據(jù)庫(kù)結(jié)構(gòu)

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 '微信號(hào)',
  `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是上級(jí)ID,無(wú)限分級(jí)

遞歸代碼

注意:在引用遞歸函數(shù)本身的時(shí)候,一定要return $this->遞歸函數(shù),否則返回NULL

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;
        }
    }

控制器調(diào)用

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

php無(wú)限極分類(遞歸)

建表的時(shí)候,增加一個(gè)PID字段用來(lái)區(qū)別自己所屬的分類

idpidname
10汽車
21歐拉
31吉利
43沃爾沃
51大眾

代碼

/**
     * 遞歸實(shí)現(xiàn)無(wú)限極分類
     * @param $array 分類數(shù)據(jù)
     * @param $pid 父ID
     * @param $level 分類級(jí)別
     * @return $list 分好類的數(shù)組 直接遍歷即可 $level可以用來(lái)遍歷縮進(jìn)
     */
function getTree($array, $pid =0, $level = 0){
        //聲明靜態(tài)數(shù)組,避免遞歸調(diào)用時(shí),多次聲明導(dǎo)致數(shù)組覆蓋
        static $list = [];
        foreach ($array as $key => $value){
            //第一次遍歷,找到父節(jié)點(diǎn)為根節(jié)點(diǎn)的節(jié)點(diǎn) 也就是pid=0的節(jié)點(diǎn)
            if ($value['pid'] == $pid){
                //父節(jié)點(diǎn)為根節(jié)點(diǎn)的節(jié)點(diǎn),級(jí)別為0,也就是第一級(jí)
                $value['level'] = $level;
                //把數(shù)組放到list中
                $list[] = $value;
                //把這個(gè)節(jié)點(diǎn)從數(shù)組中移除,減少后續(xù)遞歸消耗
                unset($array[$key]);
                //開始遞歸,查找父ID為該節(jié)點(diǎn)ID的節(jié)點(diǎn),級(jí)別則為原級(jí)別+1
                getTree($array, $value['id'], $level+1);
            }
        }
        return $list;
    }
    /*
     * 獲得遞歸完的數(shù)據(jù),遍歷生成分類
     */
    $array = getTree($array);
    foreach($array) as $value{
       echo str_repeat('--', $value['level']), $value['name'].'<br />';
    }
//輸出結(jié)果 無(wú)限極分類實(shí)現(xiàn)ok
/**
河北省
--邯鄲市
----永年區(qū)
--武安市
北京市
--朝陽(yáng)區(qū)
----望京
----酒仙橋
--通州區(qū)
**/

PHP null轉(zhuǎn)成空字符串

		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;

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

广昌县| 星子县| 兴城市| 通江县| 安顺市| 英山县| 凤山市| 青龙| 龙南县| 郯城县| 开远市| 韶关市| 东海县| 科技| 孝义市| 洪洞县| 尖扎县| 且末县| 兴城市| 德格县| 铅山县| 安平县| 剑川县| 调兵山市| 枣强县| 靖西县| 高安市| 安顺市| 通渭县| 宣恩县| 房山区| 建阳市| 葵青区| 桂东县| 阿坝| 青川县| 北安市| 肥东县| 神农架林区| 清水县| 成武县|