php實作將資料庫查詢的結果產生樹形列表
這篇文章主要介紹了php從資料庫查詢結果產生樹狀清單的方法,涉及php操作html元素產生樹狀清單的技巧,非常具有實用價值,需要的朋友可以參考下
#本文實例講述了php從資料庫查詢結果產生樹形清單的方法。具體分析如下:
本程式碼可以從資料庫讀取資料產生一個類似windows的資源管理器的樹狀清單
<?php /* Here are the database definitions (for Solid) that i use in this code. * It should not be hard to adapt it to another database. */ /* CREATE TABLE dirent_types ( id INTEGER NOT NULL, icon VARCHAR(50), name VARCHAR(50), PRIMARY KEY(id) ); INSERT INTO dirent_types VALUES(1, 'folderclosed', 'Directory'); INSERT INTO dirent_types VALUES(2, 'document', 'File'); CREATE TABLE directory ( id INTEGER NOT NULL, parent INTEGER REFERENCES directory(id), name VARCHAR(200), icon VARCHAR(50), type INTEGER REFERENCES dirent_types(id), url VARCHAR(200), PRIMARY KEY(id) ); DROP INDEX directory_idx; CREATE UNIQUE INDEX directory_idx ON directory(parent, name); CREATE SEQUENCE dirent_id; "CREATE PROCEDURE insert_dir_entry (name VARCHAR, parent INTEGER, type INTEGER) RETURNS(id INTEGER) BEGIN EXEC SQL WHENEVER SQLERROR ABORT; EXEC SEQUENCE dirent_id.NEXT INTO id; EXEC SQL PREPARE c_insert INSERT INTO directory (id, parent, type, name) VALUES(?, ?, ?, ?); EXEC SQL EXECUTE c_insert USING (id, parent, type, name); EXEC SQL DROP c_insert; END"; CALL insert_dir_entry('My Computer', NULL, 1); CALL insert_dir_entry('Network Neighbourhood', NULL, 1); CALL insert_dir_entry('lucifer.guardian.no', 2, 1); CALL insert_dir_entry('rafael.guardian.no', 2, 1); CALL insert_dir_entry('uriel.guardian.no', 2, 1); CALL insert_dir_entry('Control Panel', NULL, 1); CALL insert_dir_entry('Services', 6, 1); CALL insert_dir_entry('Apache', 7, 2); CALL insert_dir_entry('Solid Server 2.2', 7, 2); */ function icon($icon, $name = '', $width = 0, $height = 0) { global $DOCUMENT_ROOT; $icon_loc = '/pics/menu'; $file = "$DOCUMENT_ROOT$icon_loc/$icon.gif"; if (!$width || !$height) { $iconinfo = getimagesize($file); if (!$width) { $width = $iconinfo[0]; } if (!$height) { $height = $iconinfo[1]; } } printf( '<img%s border=0 align=top src="/pics/menu/%s.gif" '. 'width="%d" height="%d">', $name ? " name=\"$name\"" : '', $icon, $width, $height); } function display_directory($parent,$showdepth=0,$ancestors=false){ global $child_nodes, $node_data, $last_child; reset($child_nodes[$parent]); $size = sizeof($child_nodes[$parent]); $lastindex = $size - 1; if (!$ancestors) { $ancestors = array(); } $depth = sizeof($ancestors); printf( '<p id="node_%d" class="dirEntry" visibility="%s">', $parent, $showdepth > 0 ? 'show' : 'hide'); while (list($index, $node) = each($child_nodes[$parent])) { for ($i = 0; $i < $depth; $i++) { $up_parent = (int)$node_data[$ancestors[$i]][ 'parent']; $last_node_on_generation = $last_child[$up_parent]; $uptree_node_on_generation = $ancestors[$i]; if ($last_node_on_generation == $uptree_node_on_generation) { icon( "blank"); } else { icon( "line"); } } if ($child_nodes[$node]) { // has children, i.e. it is a folder $conn_icon = "plus"; $expand = true; } else { $conn_icon = "join"; $expand = false; } if ($index == $lastindex) { $conn_icon .= "bottom"; } elseif ($depth == 0 && $index == 0) { $conn_icon .= "top"; } if ($expand) { printf( "<a href=\"javascript:document.layers['node_%d'].visibility='show'\">", $node); } icon($conn_icon, "connImg_$node"); if ($expand) { print( "</a>"); } $icon = $node_data[$node][ 'icon']; if (!$icon) { $type = $node_data[$node][ 'type']; $icon = $GLOBALS[ 'dirent_icons'][$type]; } icon($icon, "nodeImg_$node"); $name = $node_data[$node][ 'name']; printf( '?<font size="%d">%s</font><br%c>', -1, $name, 10); if ($child_nodes[$node]) { $newdepth = $showdepth; if ($newdepth > 0) { $newdepth--; } $new_ancestors = $ancestors; $new_ancestors[] = $node; display_directory($node, $newdepth, $new_ancestors); } } print( "</p\n>"); } function setup_directory($parent, $maxdepth) { global $dirent_icons, $child_nodes, $node_data, $last_child; $dirent_icons = sql_assoc('SELECT id,icon FROM dirent_types'); $query = 'SELECT id,parent,type,icon,name '. 'FROM directory '. 'ORDER BY parent,name'; $child_nodes = array(); $node_data = array(); $res = sql($query); while (list($id,$parent,$type,$icon,$name)=db_fetch_row($res)){ $child_nodes[(int)$parent][] = $id; $node_data[$id] = array( 'id' => $id, 'parent' => $parent, 'type' => $type, 'icon' => $icon, 'name' => $name); $last_child[(int)$parent] = $id; } } ?>
總結:以上就是本篇文的全部內容,希望對大家的學習有所幫助。
相關推薦:
以上是php實作將資料庫查詢的結果產生樹形列表的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。
