快速业务通道

php:树形结构的算法

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-25
/堆栈
// $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 a

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号