在 Table 中显示父子数据
Display Parent-Child data in Table
我从 mysql 获取了一些数据 我需要以 table 树格式显示数据,但它不起作用。但是我试图在列表的帮助下显示它,但实际上需要 table 格式。
<?php
session_start();
include 'dbconn.php';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
mysql_connect('localhost','root','root');
mysql_select_db('cms');
//select all rows from the main_menu table
$result = mysql_query("select id, label as title, parent as parentid,link from pages");
//create a multidimensional array to hold a list of menu and parent menu
$menu = array(
'menus' => array(),
'parent_menus' => array(),
);
//build the array lists with data from the menu table
while ($row = mysql_fetch_assoc($result)) {
//creates entry into menus array with current menu id ie. $menus['menus'][1]
$menu['menus'][$row['id']] = $row;
//creates entry into parent_menus array. parent_menus array contains a list of all menus with children
$menu['parent_menus'][$row['parentid']][] = $row['id'];
}
// Create the main function to build milti-level menu. It is a recursive function.
function buildMenu($parent, $menu) {
$html = "";
$char=" ";
if (isset($menu['parent_menus'][$parent])) {
foreach ($menu['parent_menus'][$parent] as $menu_id) {
if (!isset($menu['parent_menus'][$menu_id])) {
$html .= "<li>".$menu['menus'][$menu_id]['title']."</li>";
}
if (isset($menu['parent_menus'][$menu_id])) {
$html .= "<li>".$menu['menus'][$menu_id]['title'];
$html .= "<ul>";
$html .= buildMenu($menu_id, $menu);
$html .= "</ul>";
$html .= "</li>";
}
}
}
return $html;
}
echo buildMenu(0, $menu);
?>
我得到的输出是:
我稍微修改了 buildMenu 函数:我需要缩进 table 我得到的只是一列
function buildMenu($parent, $menu) {
$html = "";
$char=" ";
$html.="<table border='3px'>";
if (isset($menu['parent_menus'][$parent])) {
foreach ($menu['parent_menus'][$parent] as $menu_id) {
if (!isset($menu['parent_menus'][$menu_id])) {
$html .= "<tr><td>".$menu['menus'][$menu_id]['title']."</td></tr>";
}
if (isset($menu['parent_menus'][$menu_id])) {
$html .= "<tr><td>".$menu['menus'][$menu_id]['title'];
$html .= "<tr><td>";
$html .= buildMenu($menu_id, $menu);
$html .= "</td></tr>";
$html .= "</td></tr>";
}
}
}
$html.="</table>";
return $html;
}
并得到输出为:
我的目标是得到这样的结构:
好吧,如果它只是看起来,那么相应地设置 table 的样式以使您的缩进正确,例如
td {padding-left:10px}
我相信 "correct" 语义上的方法是使用项目符号列表样式(如您的第一个示例),然后根据需要删除项目符号和样式
ul {
list-style-type: none;
padding: 0px;
margin: 0px;
}
ul li {
padding-left: 15px;
}
感谢大家的努力:
这是我期待的代码
我的最终 buildMenu 函数:
echo $html="<table class='test2'><tr data-tt-id='0'><td>Root</td></tr>";
function buildMenu($parent, $menu) {
$char=" ";
if (isset($menu['parent_menus'][$parent])) {
foreach ($menu['parent_menus'][$parent] as $menu_id) {
//echo "id:".$menu['menus'][$menu_id]['id']."par:".$menu['menus'][$menu_id]['parentid'];
if (!isset($menu['parent_menus'][$menu_id])) {
$html .= "<tr data-tt-id='".$menu['menus'][$menu_id]['id']."' data-tt-parent-id='".$menu['menus'][$menu_id]['parentid']."'><td>".$menu['menus'][$menu_id]['title']."</td></tr>";
}
if (isset($menu['parent_menus'][$menu_id])) {
$html .= "<tr data-tt-id='".$menu['menus'][$menu_id]['id']."' data-tt-parent-id='".$menu['menus'][$menu_id]['parentid']."'><td>".$menu['menus'][$menu_id]['title'];
$html .= "<td>";
$html .= buildMenu($menu_id, $menu);
$html .= "</td>";
$html .= "</td></tr>";
}
}
}
return $html;
}
echo buildMenu(0, $menu);
echo "</table>";
最终结果:1:Collapsed树2:Expanded树
希望这对遇到同样问题的人有所帮助。
是的,对于 TreeTable,我使用了 Github 插件 Github: TreeTable Plugin
我从 mysql 获取了一些数据 我需要以 table 树格式显示数据,但它不起作用。但是我试图在列表的帮助下显示它,但实际上需要 table 格式。
<?php
session_start();
include 'dbconn.php';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
mysql_connect('localhost','root','root');
mysql_select_db('cms');
//select all rows from the main_menu table
$result = mysql_query("select id, label as title, parent as parentid,link from pages");
//create a multidimensional array to hold a list of menu and parent menu
$menu = array(
'menus' => array(),
'parent_menus' => array(),
);
//build the array lists with data from the menu table
while ($row = mysql_fetch_assoc($result)) {
//creates entry into menus array with current menu id ie. $menus['menus'][1]
$menu['menus'][$row['id']] = $row;
//creates entry into parent_menus array. parent_menus array contains a list of all menus with children
$menu['parent_menus'][$row['parentid']][] = $row['id'];
}
// Create the main function to build milti-level menu. It is a recursive function.
function buildMenu($parent, $menu) {
$html = "";
$char=" ";
if (isset($menu['parent_menus'][$parent])) {
foreach ($menu['parent_menus'][$parent] as $menu_id) {
if (!isset($menu['parent_menus'][$menu_id])) {
$html .= "<li>".$menu['menus'][$menu_id]['title']."</li>";
}
if (isset($menu['parent_menus'][$menu_id])) {
$html .= "<li>".$menu['menus'][$menu_id]['title'];
$html .= "<ul>";
$html .= buildMenu($menu_id, $menu);
$html .= "</ul>";
$html .= "</li>";
}
}
}
return $html;
}
echo buildMenu(0, $menu);
?>
我得到的输出是:
我稍微修改了 buildMenu 函数:我需要缩进 table 我得到的只是一列
function buildMenu($parent, $menu) {
$html = "";
$char=" ";
$html.="<table border='3px'>";
if (isset($menu['parent_menus'][$parent])) {
foreach ($menu['parent_menus'][$parent] as $menu_id) {
if (!isset($menu['parent_menus'][$menu_id])) {
$html .= "<tr><td>".$menu['menus'][$menu_id]['title']."</td></tr>";
}
if (isset($menu['parent_menus'][$menu_id])) {
$html .= "<tr><td>".$menu['menus'][$menu_id]['title'];
$html .= "<tr><td>";
$html .= buildMenu($menu_id, $menu);
$html .= "</td></tr>";
$html .= "</td></tr>";
}
}
}
$html.="</table>";
return $html;
}
并得到输出为:
我的目标是得到这样的结构:
好吧,如果它只是看起来,那么相应地设置 table 的样式以使您的缩进正确,例如
td {padding-left:10px}
我相信 "correct" 语义上的方法是使用项目符号列表样式(如您的第一个示例),然后根据需要删除项目符号和样式
ul {
list-style-type: none;
padding: 0px;
margin: 0px;
}
ul li {
padding-left: 15px;
}
感谢大家的努力:
这是我期待的代码
我的最终 buildMenu 函数:
echo $html="<table class='test2'><tr data-tt-id='0'><td>Root</td></tr>";
function buildMenu($parent, $menu) {
$char=" ";
if (isset($menu['parent_menus'][$parent])) {
foreach ($menu['parent_menus'][$parent] as $menu_id) {
//echo "id:".$menu['menus'][$menu_id]['id']."par:".$menu['menus'][$menu_id]['parentid'];
if (!isset($menu['parent_menus'][$menu_id])) {
$html .= "<tr data-tt-id='".$menu['menus'][$menu_id]['id']."' data-tt-parent-id='".$menu['menus'][$menu_id]['parentid']."'><td>".$menu['menus'][$menu_id]['title']."</td></tr>";
}
if (isset($menu['parent_menus'][$menu_id])) {
$html .= "<tr data-tt-id='".$menu['menus'][$menu_id]['id']."' data-tt-parent-id='".$menu['menus'][$menu_id]['parentid']."'><td>".$menu['menus'][$menu_id]['title'];
$html .= "<td>";
$html .= buildMenu($menu_id, $menu);
$html .= "</td>";
$html .= "</td></tr>";
}
}
}
return $html;
}
echo buildMenu(0, $menu);
echo "</table>";
最终结果:1:Collapsed树2:Expanded树
希望这对遇到同样问题的人有所帮助。
是的,对于 TreeTable,我使用了 Github 插件 Github: TreeTable Plugin