成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

yzzz / 2859人閱讀

無限級(jí)分類

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

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

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

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

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

無限級(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排序過的所有數(shù)據(jù)
2、$showFName 顯示名字的字段名(格式化過的)
3、$titleFName 標(biāo)題的字段名(無格式化)
4、$levelFName 層級(jí)字段名
5、$pidFName 父id的字段名
6、$idFName id的字段名

第二種(使用引用變量)

/**
 * 無限級(jí)分類
 * @param Array $treeList //接受處理完成數(shù)據(jù)的數(shù)組
 * @param Array $data //數(shù)據(jù)庫里獲取的結(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排序過的所有數(shù)據(jù)
2、返回的無限級(jí)列表數(shù)據(jù)都存在$treeList里面

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

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

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

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

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

相關(guān)文章

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

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

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

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

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

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

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

    摘要:有這樣一個(gè)表,是分類的,是分類名稱,是上級(jí)分類的?,F(xiàn)在有個(gè)分類,程序要找到它上級(jí)的上級(jí)的上級(jí)分類的,簡(jiǎn)單說就是找出頂級(jí)分類的。比如新鮮水果的是,對(duì)應(yīng)父類是,而的父是,沒有父類,也就是頂級(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元查看
<