PHP實現(xiàn)簡單的樹形列表之二

2017.5.22 北京 大雨

創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網綜合服務,包含不限于成都做網站、成都網站建設、慶元網絡推廣、微信小程序開發(fā)、慶元網絡營銷、慶元企業(yè)策劃、慶元品牌公關、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)建站為所有大學生創(chuàng)業(yè)者提供慶元建站搭建服務,24小時服務熱線:028-86922220,官方網址:muchs.cn

來到公司之后, 準備把代碼移植到公司的小項目里,移植的過程中發(fā)現(xiàn)了一處設計有問題的地方,調整一下。

第一處錯誤是:構建葉子節(jié)點的時候,只保存了節(jié)點的名稱,沒有存ID, 如果頁面跟后臺交互的時候,當存在節(jié)點名稱一樣的情況,服務器就不能判斷出用戶正在再操作那個節(jié)點。

更改了一下數(shù)據結構的定義:
用數(shù)組來存放一個節(jié)點, 如果這個節(jié)點是末端節(jié)點,則該數(shù)組,只有一個字符串元素,

如果一個節(jié)點為葉子節(jié)點,則該節(jié)點將會有兩個字符串元素,第一元素存節(jié)點名稱,第二個元素存節(jié)點ID。
如果這個節(jié)點存在子節(jié)點,則在當前數(shù)組中,增加一個數(shù)組,所有的子節(jié)點的元素存放在這個數(shù)組中。

從數(shù)據庫中取數(shù)據的代碼調整如下:

function build_book_tree($data, $parentid){
    $nodeName = '';
    $child = [];
    foreach($data as $key => $val){
        //如果當前遍歷的項跟查詢的id相同,則獲取節(jié)點的名稱
        if ($val[0] == $parentid){
            $nodeName = $val[1];
        }
        //如果當前節(jié)點的父節(jié)點跟查詢的節(jié)點相同,則通過遞歸,獲取他的子節(jié)點,并將結果,賦給當前節(jié)點節(jié)點數(shù)組中
        if ($val[2] == $parentid){
            array_push($child, build_book_tree($data, $val[0]));
        }
    }
    //不存放空節(jié)點
    if (count($child) > 0)
        return array($nodeName, $child);
    else 
        //return $nodeName;
        return [$nodeName, $parentid];
}

生成HTML list的代碼調整如下

function build_html_list($data)
{
    //輸出標準父子節(jié)點
    if (is_array($data) and count($data) == 2){
        if (is_string($data[0]) and is_array($data[1])){
            // 輸出節(jié)點名
            echo "<li>".$data[0];
            // 輸出子節(jié)點
            if (is_array($data[1])){
                echo "<ul>";
                foreach ($data[1] as $item){
                    if (is_string($item)){
                        echo "<li>".$item."</li>";
                    } 
                    else{
                        build_html_list($item);    
                    }
                }
                echo "</ul>";
            }
            echo "</li>";   
        }
        // 輸出葉子節(jié)點 2017.5.22 add by sunhu
        else if (is_string($data[0]) and is_int($data[1])){
            echo sprintf('<li cid="%d">%s</li>', $data[1], $data[0]);
        }                         
    } 
}

這樣,如果用戶單擊一個 li 元素的時候,就可以從 li元素的 cid 屬性中,查找到 節(jié)點 id 了

標題名稱:PHP實現(xiàn)簡單的樹形列表之二
文章鏈接:http://muchs.cn/article8/ihjiip.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站設計公司、手機網站建設網站導航、商城網站企業(yè)建站、ChatGPT

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)