国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PHP 無限級分類最佳實踐

yzzz / 2854人閱讀

無限級分類

是一種很常見,很必須的功能,幾乎每個項目都有。

應用場景:下拉列表,樹型列表等

無限級分類的類型

前端實現(前端框架一般已經實現好了,只要后端按照指定格式傳數據給前端就可以生成了)

后端實現(下面主要講這種實現)

無限級多種實現

第一種(推薦)

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

第二種(使用引用變量)

/**
 * 無限級分類
 * @param Array $treeList //接受處理完成數據的數組
 * @param Array $data //數據庫里獲取的結果集
 * @param String $level //格式化層級字段名
 * @param Int $pid
 * @param Int $count //第幾級分類
 */
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 已經asc排序過的所有數據
2、返回的無限級列表數據都存在$treeList里面

第三種(使用靜態變量有限制:如果一次請求調用兩次來實現2個無限級分類就會出現問題,所以不推薦)

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

注意:
1、$list 已經asc排序過的所有數據

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/22324.html

相關文章

  • PHP框架之ThinkPHP模塊開發系列八,無限分類的刪除

    摘要:我們在新建一個刪除前的鉤子函數,再利用遞歸方法實現子欄目的刪除。最后我們刪除把鉤子函數恢復到原始狀態在瀏覽器中輸入,然后點擊美國一欄中的刪除,此時會同時刪除美國下的紐約。至此,無限級分類的刪除功能操作完畢。 在此現更正一下之前的預告,之前忘記了先應該把無限級分類欄目列表功能做完,也就是刪除功能還沒做,所以今天我們先做刪除,下一節再做面包屑導航。非常抱歉。 同時,不知道是什么原因,上一節...

    BWrong 評論0 收藏0
  • PHP中的無限分類、無限嵌套評論

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

    Shisui 評論0 收藏0
  • PHP中的無限分類無限嵌套評論

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

    李義 評論0 收藏0
  • 超優雅!兩行代碼搞定 php 無限分類 獲取頂分類ID

    摘要:有這樣一個表,是分類的,是分類名稱,是上級分類的?,F在有個分類,程序要找到它上級的上級的上級分類的,簡單說就是找出頂級分類的。比如新鮮水果的是,對應父類是,而的父是,沒有父類,也就是頂級分類了。 有這樣一個表,id是分類的ID,name是分類名稱,pid是上級分類的ID。showImg(https://segmentfault.com/img/bVtnrg); 現在有個分類ID,程序要...

    hedzr 評論0 收藏0

發表評論

0條評論

yzzz

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<