亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

PHP 無(wú)限級(jí)分類最佳實(shí)踐

yzzz / 2921人閱讀

無(wú)限級(jí)分類

是一種很常見(jiàn),很必須的功能,幾乎每個(gè)項(xiàng)目都有。

應(yīng)用場(chǎng)景:下拉列表,樹(shù)型列表等

無(wú)限級(jí)分類的類型

前端實(shí)現(xiàn)(前端框架一般已經(jīng)實(shí)現(xiàn)好了,只要后端按照指定格式傳數(shù)據(jù)給前端就可以生成了)

后端實(shí)現(xiàn)(下面主要講這種實(shí)現(xiàn))

無(wú)限級(jí)多種實(shí)現(xiàn)

第一種(推薦)

function infiniteSort($data, $showFName, $titleFName, $pidFName = "pid", $idFName = "id", $levelFName = "level", $pid = 0, $level = 0)
{
    $tree = array();

    foreach ($data as $key => $value) {

        if ($value[$pidFName] == $pid) {
            $value[$levelFName] = $level;
            $value[$showFName] = str_repeat("  ", $level) . "|-" . $value[$titleFName];
            $tree[] = $value;
            unset($data[$key]);
            $tempArr = infiniteSort($data, $showFName, $titleFName, $pidFName, $idFName, $level, $value[$idFName], $level + 1);
            if(!empty($tempArr)){
                $tree = array_merge($tree, $tempArr);
            }
        }

    }

    return $tree;
}

注意:
1、$data 已經(jīng)asc排序過(guò)的所有數(shù)據(jù)
2、$showFName 顯示名字的字段名(格式化過(guò)的)
3、$titleFName 標(biāo)題的字段名(無(wú)格式化)
4、$levelFName 層級(jí)字段名
5、$pidFName 父id的字段名
6、$idFName id的字段名

第二種(使用引用變量)

/**
 * 無(wú)限級(jí)分類
 * @param Array $treeList //接受處理完成數(shù)據(jù)的數(shù)組
 * @param Array $data //數(shù)據(jù)庫(kù)里獲取的結(jié)果集
 * @param String $level //格式化層級(jí)字段名
 * @param Int $pid
 * @param Int $count //第幾級(jí)分類
 */
function tree(&$treeList, &$data, $level, $show_name, $field_name, $field_pid = "pid", $field_id = "id", $pid = 0, $count = 0)
{
    foreach ($data as $key => $value) {

        if ($value[$field_pid] == $pid) {
            $value[$level] = $count;
            $value[$show_name] = str_repeat("    ",$count)."|-".$value[$field_name];
            $treeList[] = $value;
            unset($data[$key]);
            tree($treeList, $data, $level, $show_name, $field_name,$field_pid, $field_id, $value[$field_id], $count+1);
        }

    }
}

注意:
1、$data 已經(jīng)asc排序過(guò)的所有數(shù)據(jù)
2、返回的無(wú)限級(jí)列表數(shù)據(jù)都存在$treeList里面

第三種(使用靜態(tài)變量有限制:如果一次請(qǐng)求調(diào)用兩次來(lái)實(shí)現(xiàn)2個(gè)無(wú)限級(jí)分類就會(huì)出現(xiàn)問(wèn)題,所以不推薦)

    public function getTree($list, $parent_id, $level=0) {
        //應(yīng)該是靜態(tài)的局部變量,這樣才能保證,在遞歸調(diào)用時(shí),所有
        //的getTree方法,操作的是一個(gè)Tree空間。
        static $tree = array();//保存找到的分類的數(shù)組
        //遍歷所有分類,通過(guò)parent_id判斷,哪些是我們正在查找的
        foreach($list as $row) {
            //判斷當(dāng)前所遍歷的分類$row, 是否是當(dāng)前需要查找的子分類
            if($row["pid"] == $parent_id) {
                //找到了一個(gè)分類
                //存起來(lái),存哪?
                $row["level"] = $level;
                $tree[] = $row;
                //繼續(xù)查找當(dāng)前$row所代表的分類的子分類
                $this->getTree($list, $row["id"], $level+1);
            }
        }
        return $tree;
    }
    

注意:
1、$list 已經(jīng)asc排序過(guò)的所有數(shù)據(jù)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/22324.html

相關(guān)文章

  • PHP框架之ThinkPHP模塊開(kāi)發(fā)系列八,無(wú)限級(jí)分類的刪除

    摘要:我們?cè)谛陆ㄒ粋€(gè)刪除前的鉤子函數(shù),再利用遞歸方法實(shí)現(xiàn)子欄目的刪除。最后我們刪除把鉤子函數(shù)恢復(fù)到原始狀態(tài)在瀏覽器中輸入,然后點(diǎn)擊美國(guó)一欄中的刪除,此時(shí)會(huì)同時(shí)刪除美國(guó)下的紐約。至此,無(wú)限級(jí)分類的刪除功能操作完畢。 在此現(xiàn)更正一下之前的預(yù)告,之前忘記了先應(yīng)該把無(wú)限級(jí)分類欄目列表功能做完,也就是刪除功能還沒(méi)做,所以今天我們先做刪除,下一節(jié)再做面包屑導(dǎo)航。非常抱歉。 同時(shí),不知道是什么原因,上一節(jié)...

    BWrong 評(píng)論0 收藏0
  • PHP中的無(wú)限級(jí)分類、無(wú)限嵌套評(píng)論

    摘要:可以看到,我們首先獲取到了所有的數(shù)據(jù),然后按照父級(jí)歸類。無(wú)限嵌套評(píng)論先來(lái)看下這個(gè)無(wú)限嵌套評(píng)論長(zhǎng)什么樣子。文件掃描使用遞歸進(jìn)行目錄文件的掃描的栗子。 回顧 上一篇文章我們講到實(shí)戰(zhàn)PHP數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)之遞歸。來(lái)回顧下什么是遞歸? 一般來(lái)說(shuō),遞歸被稱為函數(shù)自身的調(diào)用。 遞歸在開(kāi)發(fā)中的實(shí)際運(yùn)用 N級(jí)分類 無(wú)限級(jí)的分類在平常的開(kāi)發(fā)中是常見(jiàn)的需求,并且在不少面試題中都會(huì)碰到。不管你做什么項(xiàng)目,應(yīng)該都...

    Shisui 評(píng)論0 收藏0
  • PHP中的無(wú)限級(jí)分類、無(wú)限嵌套評(píng)論

    摘要:可以看到,我們首先獲取到了所有的數(shù)據(jù),然后按照父級(jí)歸類。無(wú)限嵌套評(píng)論先來(lái)看下這個(gè)無(wú)限嵌套評(píng)論長(zhǎng)什么樣子。文件掃描使用遞歸進(jìn)行目錄文件的掃描的栗子。 回顧 上一篇文章我們講到實(shí)戰(zhàn)PHP數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)之遞歸。來(lái)回顧下什么是遞歸? 一般來(lái)說(shuō),遞歸被稱為函數(shù)自身的調(diào)用。 遞歸在開(kāi)發(fā)中的實(shí)際運(yùn)用 N級(jí)分類 無(wú)限級(jí)的分類在平常的開(kāi)發(fā)中是常見(jiàn)的需求,并且在不少面試題中都會(huì)碰到。不管你做什么項(xiàng)目,應(yīng)該都...

    李義 評(píng)論0 收藏0
  • 超優(yōu)雅!兩行代碼搞定 php 無(wú)限級(jí)分類 獲取頂級(jí)分類ID

    摘要:有這樣一個(gè)表,是分類的,是分類名稱,是上級(jí)分類的?,F(xiàn)在有個(gè)分類,程序要找到它上級(jí)的上級(jí)的上級(jí)分類的,簡(jiǎn)單說(shuō)就是找出頂級(jí)分類的。比如新鮮水果的是,對(duì)應(yīng)父類是,而的父是,沒(méi)有父類,也就是頂級(jí)分類了。 有這樣一個(gè)表,id是分類的ID,name是分類名稱,pid是上級(jí)分類的ID。showImg(https://segmentfault.com/img/bVtnrg); 現(xiàn)在有個(gè)分類ID,程序要...

    hedzr 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<