ホームページ >バックエンド開発 >PHPチュートリアル >PHP は、データベース クエリの結果からツリー リストを生成する機能を実装します。

PHP は、データベース クエリの結果からツリー リストを生成する機能を実装します。

墨辰丷
墨辰丷オリジナル
2018-06-11 15:27:102333ブラウズ

この記事では、PHP がデータベースのクエリ結果からツリー リストを生成する方法を主に紹介します。これには、HTML 要素を操作してツリー リストを生成するスキルが含まれます。 it

この記事の例では、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, &#39;folderclosed&#39;, &#39;Directory&#39;);
INSERT INTO dirent_types VALUES(2, &#39;document&#39;, &#39;File&#39;);
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(&#39;My Computer&#39;, NULL, 1);
CALL insert_dir_entry(&#39;Network Neighbourhood&#39;, NULL, 1);
CALL insert_dir_entry(&#39;lucifer.guardian.no&#39;, 2, 1);
CALL insert_dir_entry(&#39;rafael.guardian.no&#39;, 2, 1);
CALL insert_dir_entry(&#39;uriel.guardian.no&#39;, 2, 1);
CALL insert_dir_entry(&#39;Control Panel&#39;, NULL, 1);
CALL insert_dir_entry(&#39;Services&#39;, 6, 1);
CALL insert_dir_entry(&#39;Apache&#39;, 7, 2);
CALL insert_dir_entry(&#39;Solid Server 2.2&#39;, 7, 2);
*/
function icon($icon, $name = &#39;&#39;, $width = 0, $height = 0) {
 global $DOCUMENT_ROOT;
 $icon_loc = &#39;/pics/menu&#39;;
 $file = "$DOCUMENT_ROOT$icon_loc/$icon.gif";
 if (!$width || !$height) {
 $iconinfo = getimagesize($file);
 if (!$width) {
 $width = $iconinfo[0];
 }
 if (!$height) {
 $height = $iconinfo[1];
 }
 }
 printf( &#39;<img%s border=0 align=top src="/pics/menu/%s.gif" &#39;.
 &#39;width="%d" height="%d">&#39;, $name ? " name=\"$name\"" : &#39;&#39;,
 $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( &#39;<p id="node_%d" class="dirEntry" visibility="%s">&#39;,
 $parent, $showdepth > 0 ? &#39;show&#39; : &#39;hide&#39;);
 while (list($index, $node) = each($child_nodes[$parent])) {
 for ($i = 0; $i < $depth; $i++) {
 $up_parent = (int)$node_data[$ancestors[$i]][ &#39;parent&#39;];
 $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[&#39;node_%d&#39;].visibility=&#39;show&#39;\">", $node);
 }
 icon($conn_icon, "connImg_$node");
 if ($expand) {
 print( "</a>");
 }
 $icon = $node_data[$node][ &#39;icon&#39;];
 if (!$icon) {
 $type = $node_data[$node][ &#39;type&#39;];
 $icon = $GLOBALS[ &#39;dirent_icons&#39;][$type];
 }
 icon($icon, "nodeImg_$node");
 $name = $node_data[$node][ &#39;name&#39;];
 printf( &#39;?<font size="%d">%s</font><br%c>&#39;, -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(&#39;SELECT id,icon FROM dirent_types&#39;);
 $query = &#39;SELECT id,parent,type,icon,name &#39;.
 &#39;FROM directory &#39;.
 &#39;ORDER BY parent,name&#39;;
 $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( &#39;id&#39; => $id,
 &#39;parent&#39; => $parent,
 &#39;type&#39; => $type,
 &#39;icon&#39; => $icon,
 &#39;name&#39; => $name);
 $last_child[(int)$parent] = $id;
 }
}
?>

概要: 以上です。この記事 この記事の内容全体が皆さんの学習に役立つことを願っています。

関連する推奨事項:

php のエラー処理の一般的なテクニック

php と html5 Websocket 通信の組み合わせuse

php 画像のアップロードと JavaScript プラグインの使用

以上がPHP は、データベース クエリの結果からツリー リストを生成する機能を実装します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。