昨天大青年写了一个
http://expert.csdn.net/Expert/topic/2976/2976131.xml?temp=.2451441
<?php$data = array(array('id'=>1, name=>'name1', 'pid'=>0),
array('id'=>2, name=>'name1', 'pid'=>1),
array('id'=>3, name=>'name1', 'pid'=>0),
array('id'=>4, name=>'name1', 'pid'=>3),
array('id'=>5, name=>'name1', 'pid'=>0),
array('id'=>6, name=>'name1', 'pid'=>2),
array('id'=>7, name=>'name1', 'pid'=>6),
array('id'=>8, name=>'name1', 'pid'=>4),
array('id'=>9, name=>'name1', 'pid'=>7)
);
$level = $result = array();
foreach($data as $value){
$level[$value['pid']][$value['id']] = 'END';
}
$result = $level[0];
doLevel($level, $result);function doLevel(&$level,&$result){
foreach($result as $key=>$value){
if(isset($level[$key])){
$result[$key] = $level[$key];
doLevel(&$level, &$result[$key]);
}
}
}
echo "<pre>"; print_R($result);?>
整个代码分为几个部分:
第一步从数据库中选出所有的分类
上面的例子中($data是我从数据库中选出来的分类的结果集),第二步通过循环制作一个数据等级二维数组。第三步通过递归函数生成一个用分类的id值作为键值的多位数组,这个数组就是最后的等技数组。第四步打印出来结果集。结果有两个部分可以用
$data存储分类信息。
$result存储等级信息。------------------------------------------------------------
如果你是从数据库选。可以把$data的负值语句删了,
把foreach($data as $value)改成
foreach($value = $this->db->fetch_array($query))就可以了
具体的事例如下:<?php$sqlCategory = "SELECT * FROM catogory";
$query = $this->db->query($sqlCategory);
$level = $result = array();
foreach($value = $this->db->fetch_array($query)){
$level[$value['pid']][$value['id']] = 'END';
}
$result = $level[0];
doLevel($level, $result);function doLevel(&$level,&$result){
foreach($result as $key=>$value){
if(isset($level[$key])){
$result[$key] = $level[$key];
doLevel(&$level, &$result[$key]);
}
}
}
echo "<pre>"; print_R($result);?>
http://expert.csdn.net/Expert/topic/2976/2976131.xml?temp=.2451441
<?php$data = array(array('id'=>1, name=>'name1', 'pid'=>0),
array('id'=>2, name=>'name1', 'pid'=>1),
array('id'=>3, name=>'name1', 'pid'=>0),
array('id'=>4, name=>'name1', 'pid'=>3),
array('id'=>5, name=>'name1', 'pid'=>0),
array('id'=>6, name=>'name1', 'pid'=>2),
array('id'=>7, name=>'name1', 'pid'=>6),
array('id'=>8, name=>'name1', 'pid'=>4),
array('id'=>9, name=>'name1', 'pid'=>7)
);
$level = $result = array();
foreach($data as $value){
$level[$value['pid']][$value['id']] = 'END';
}
$result = $level[0];
doLevel($level, $result);function doLevel(&$level,&$result){
foreach($result as $key=>$value){
if(isset($level[$key])){
$result[$key] = $level[$key];
doLevel(&$level, &$result[$key]);
}
}
}
echo "<pre>"; print_R($result);?>
整个代码分为几个部分:
第一步从数据库中选出所有的分类
上面的例子中($data是我从数据库中选出来的分类的结果集),第二步通过循环制作一个数据等级二维数组。第三步通过递归函数生成一个用分类的id值作为键值的多位数组,这个数组就是最后的等技数组。第四步打印出来结果集。结果有两个部分可以用
$data存储分类信息。
$result存储等级信息。------------------------------------------------------------
如果你是从数据库选。可以把$data的负值语句删了,
把foreach($data as $value)改成
foreach($value = $this->db->fetch_array($query))就可以了
具体的事例如下:<?php$sqlCategory = "SELECT * FROM catogory";
$query = $this->db->query($sqlCategory);
$level = $result = array();
foreach($value = $this->db->fetch_array($query)){
$level[$value['pid']][$value['id']] = 'END';
}
$result = $level[0];
doLevel($level, $result);function doLevel(&$level,&$result){
foreach($result as $key=>$value){
if(isset($level[$key])){
$result[$key] = $level[$key];
doLevel(&$level, &$result[$key]);
}
}
}
echo "<pre>"; print_R($result);?>
解决方案 »
- linux下php fwrite无法写入文件
- 请教关于get搜索,火狐下面显示中文
- 帮忙看看哪里错了??急 php模拟POST
- 一个DIV的隐藏和显示
- 如何制作服务器套件?
- 求这种错误的解决方法:Fatal error: Call to a member function num() on a non-object in
- php如何通过session判断某个用户是否在线(急)
- 问一个很白痴的问题?(关于实际应用)
- 用什么下载软件可以下载邮件的附件。
- 我在Windows2000下,PHP为何不能得到预期的结果?
- 一个关于下载的小问题,在线等
- 在下想在美工方面提高一下,可提供几个界面漂亮的企业网站吗?
-------------------------------------------------
<?php
//根据key来得到其下的类别
$column["A"]=array("A1");
$column["AA"]=array("A2");
$column["AB"]=array("A3");
$column["ABA"]=array("A4");
$column["ABB"]=array("A5");
$column["ABC"]=array("A5");
$column["ABBD"]=array("A5");
$column["AC"]=array("A6");
$column["ACA"]=array("A7");
$column["ACAA"]=array("A8");
$column["ACAAB"]=array("A9");$keys=array_keys($column);$key=$_GET["key"];$arr=preg_grep("/^$key.{1}$/",$keys);$str="";
foreach($arr as $val){
//判断是否有子节点
$sub=preg_grep("/^$val.{1}$/",$keys);
$node=(empty($sub))?"-":"+";
//缩进
$indent=str_repeat(" ",strlen($val)); $str.="<br><span onClick=openkey(\"$val\",\"$indent\") id=o$val>$indent$node$val</span><span id=\"t$val\"></span>";
}
?>
document.all.t<?=$key?>.innerHTML='<?=$str?>';
a.php(任意)
---------------------------------------------------
<script language="javascript">
var $file="i.php";function openkey($key,$indent){
var $okey="o"+$key;
var $tkey="t"+$key;
var $doc=document.getElementById('frame').src;
var $k=document.all($okey).innerHTML; if($k.match(/\+/)){
$doc=$file+"?key="+$key;
document.all($okey).innerHTML=$indent+"-"+$key;
}
else{
$doc="";
document.all($okey).innerHTML=$indent+"+"+$key;
document.all($tkey).innerHTML="";
} document.getElementById('frame').src=$doc;
}</script><body topmargin="0" leftmargin="0">
<span onClick="openkey('A','')" id="oA">+A</span><span id="tA"></span><br>
<script language="javascript" src="" id="frame"></script>