<?php
/**
* 显示列表
* access public
*/
function DispList()
{
//不缩进的显示方式
// $this->mIsDispListIndex = true;
// echo('<p align="right"><a href="?action=new&part=role">增加新角色</a> </p>'); _fcksavedurl=""?action=new&part=role">增加新角色</a> </p>');"
//
// $this->mListTitle = '用户角色列表';
// $this->SetDataOption('list');
//
// $this->SetQueryTable( array($this->mTableUserRole) );
//
// //查询顺序
// $this->SetQueryOrder( 'asc', $this->mTableUserRole, 'sequence' );
//
// $this->Query('list');
// parent::DispList();
// //另外一种显示方式,用数组作为堆栈,A: 压栈时存role,压完就删除source
// $this->CheckProperty('mrDb');
// $this->CheckProperty('mrSql');
// $this->mrSql->Select('role, title, parent');
// $this->mrSql->From($this->mTableUserRole);
// $this->mrSql->Orderby('parent, sequence');
// $this->mRs = $this->mrDb->Execute($this->mrSql->Sql());
// if (0 < count($this->mRs))
// {
// $source = & $this->mRs->GetArray(); //数字索引
// $stack = array(''); //堆栈
// $stacki = array(-1); //和堆栈对应,记录堆栈中数据在树中的层次
// $target = array();
// while (0 < count($stack))
// {
// $item = array_shift($stack);
// $lev = array_shift($stacki);
// if (!empty($item))
// {
// //在这里把加工过的数据放到target数组
// array_push($target, str_repeat(' ', $lev) . $item);
// //$s1 = str_repeat(' ', $lev) . $item;
// }
// $del = array(); //要从$source中删除的节点
// $ar = array(); //需要添加到堆栈中的节点
// foreach ($source as $key=>$val)
// {
// //寻找匹配的子节点
// if (empty($item))
// {
// $find = empty($source[$key]['parent']);
// }
// else
// {
// $find = ($item == $source[$key]['parent']);
// }
// if ($find)
// {
// array_unshift($ar, $source[$key]['role']);
// $del[] = $key;
// }
// }
// foreach ($ar as $val)
// {
// array_unshift($stack, $val);
// array_unshift($stacki, $lev + 1);
// }
// foreach ($del as $val)
// {
// unset($source[$val]);
// }
// echo(implode(', ', $stack) . '<br />' . implode(', ', $stacki) . '<br />' . implode(', ', $target) . '<br /><br />');
// }
// debug_array();
// }
// else
// {
// echo('<center>没有检索到数据</center>');
// }
//另外一种显示方式,用数组作为堆栈,B: 压栈时存数组索引,出栈并使用完后再删除source
$this->CheckProperty('mrDb');
$this->CheckProperty('mrSql');
$this->mrSql->Select('role, title, parent');
$this->mrSql->From($this->mTableUserRole);
$this->mrSql->Orderby('parent, sequence');
$this->mRs = $this->mrDb->Execute($this->mrSql->Sql());
if (!empty($this->mRs) && !$this->mRs->EOF)
{
$source = & $this->mRs->GetArray(); //数字索引
$stack = array(-1); //堆栈
$stacki = array(-1); //和堆栈对应,记录堆栈中数据在树中的层次
$target = array();
while (0 < count($stack))
{
$item = array_shift($stack);
$lev = array_shift($stacki);
if (-1 != $item)
{
//在这里把加工过的数据放到target数组
$s1 = str_repeat(' ', $lev) . '<a href="?action=disp&part=role&role=' . $source[$item]['role'] . '">' . $source[$item]['title'] . '</a>';
$s2 = '<a href="?action=edit&part=role&role=' . $source[$item]['role'] . '">编辑</a> <a href="?action=delete&part=role&role=' . $source[$item]['role'] . '">删除</a>';
array_push($target, array($s1, $s2));
}
$del = array(); //要从$source中删除的节点
$ar = array(); //需要添加到堆栈中的节点
foreach ($source as $key=>$val)
{
//寻找匹配的子节点
if (-1 == $item)
{
$find = empty($source[$key]['parent']);
}
else
{
$find = ($source[$item]['role'] == $source[$key]['parent']);
}
if ($find)
{
array_unshift($ar, $key);
}
}
foreach ($ar as $val)
{
array_unshift($stack, $val);
array_unshift($stacki, $lev + 1);
}
//从source中删除
unset($source[$item]);
//echo(implode(', ', $stack) . '<br />' . implode(', ', $stacki) . '<br />' . implode(', ', $target) . '<br /><br />');
}
//输出
echo('<p align="right"><a href="?action=new&part=role">增加新角色</a> </p>');
array_unshift($target, array('角色', '操作'));
$this->CheckProperty('mrLt');
$this->mrLt->SetData($target);
$this->mrLt->mListTitle = '用户角色列表';
$this->mrLt->mIsDispIndex = false;
$this->mrLt->Disp();
}
else
{
echo('<center>没有检索到数据</center>');
}
} // end of function DispList
?>
php:树形结构的算法 4
80酷酷网 80kuku.com