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

php遞歸如何獲取無限上級ID

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

php遞歸獲取無限上級ID

數(shù)據(jù)庫結構

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,無限分級

遞歸代碼

注意:在引用遞歸函數(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無限極分類(遞歸)

建表的時候,增加一個PID字段用來區(qū)別自己所屬的分類

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

代碼

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

PHP null轉成空字符串

		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;

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

相關文章

最新評論

康马县| 五常市| 介休市| 曲麻莱县| 白河县| 贡嘎县| 龙海市| 河津市| 隆子县| 兖州市| 汕头市| 浏阳市| 嵊泗县| 定边县| 墨江| 康平县| 台北市| 福建省| 德兴市| 牟定县| 崇仁县| 恭城| 高尔夫| 北京市| 清流县| 定兴县| 中山市| 桃江县| 西乡县| 义乌市| 彰化市| 醴陵市| 莫力| 西平县| 民丰县| 望江县| 平南县| 永顺县| 象州县| 嫩江县| 晋中市|