function get_cls($cid){
$arr = array(
1 => array('id'=>'1','parentid'=>0,'name'=>'一级栏目一'),
2 => array('id'=>'2','parentid'=>0,'name'=>'一级栏目二'),
3 => array('id'=>'3','parentid'=>1,'name'=>'二级栏目一'),
4 => array('id'=>'4','parentid'=>1,'name'=>'二级栏目二'),
5 => array('id'=>'5','parentid'=>2,'name'=>'二级栏目三'),
6 => array('id'=>'6','parentid'=>3,'name'=>'三级栏目一'),
7 => array('id'=>'7','parentid'=>3,'name'=>'三级栏目二')
);
$data = array();
while($arr[$cid]){
$data[] = $arr[$cid]['name'];
$cid = $arr[$cid]['parentid'];
}
$data = array_reverse($data);
return implode(' -- ', $data);
}
echo get_cls(7);
######回复
@Tuesday : 哦,我明白了,那就是再多做一个数组成员的遍历,把id变成是数组的索引,是吗?######回复
@btgoa : 既然能够索引可以是0, 为什么不能换成id值? id肯定是唯一的呀,######回复
@Tuesday : 我的意思是,从数据库拉出来的数组成员的索引号是连续的从0~N,但是出来的数据库表中的id有可能是不连续的,而且有可能是不连续的。 例如: array(0=>array('id'=>500), 1=>array('id'=>608)); 这样的,这样怎么处理呢?######回复
@btgoa : 这有什么关系? pid的值存在就表示有这么一条数组. 不然上哪找它的上级?######这个代码前提是$arr中每个成员的索引号和里面具体的每一行数据的id号必须一致,parentid对应的其实并不是id,而是$arr[x]中的x,而实际从数据库中取出的数据id号并不一定是连续的,这个该怎么解决呢?谢谢!######
http://git.oschina.net/binny_w/pmf/blob/master/classes/TreeList.class.php 你自己再改一下应该就可以用了,不用考虑参数的顺序
$arrData = array ( array ( 'id' => 2, 'name' => 'A', 'parent_id' => 14 ), array ( 'id' => 19, 'name' => 'B', 'parent_id' => 18 ), array ( 'id' => 20, 'name' => 'C', 'parent_id' => 18 ), array ( 'id' => 6, 'name' => 'D', 'parent_id' => 0 ), array ( 'id' => 9, 'name' => 'E', 'parent_id' => 0 ), array ( 'id' => 10, 'name' => 'F', 'parent_id' => 0 ), array ( 'id' => 12, 'name' => 'G', 'parent_id' => 10 ), array ( 'id' => 13, 'name' => 'H', 'parent_id' => 6 ), array ( 'id' => 14, 'name' => 'I', 'parent_id' => 9 ), array ( 'id' => 18, 'name' => 'J', 'parent_id' => 13 ), array ( 'id' => 16, 'name' => 'K', 'parent_id' => 2 ) ); $objTL = new TreeList($arrData); print_r($objTL->arrIdBackPath);
能得到这样的树 D ┊┈ H ┊ ┊┈ J ┊ ┊ ┊┈ B ┊ ┊ ┊┈ C E ┊┈ I ┊ ┊┈ A ┊ ┊ ┊┈ K F ┊┈ G ######面包屑和树还是有一些区别,这里想实现的其实不是树结构,而是一个路径######
定义顶级省份的PID=0 然后数组的key=id 通过id定位pid 递归查询直到pid=0
整理输出 就可以了
这地区的数组 可以缓存成文件,不用使用数据库,记着使用完数组后 unset 下 ,