有一张表,结构如下:
============
id | pid | name
1 | 0 | 中国
2 | 1 | 浙江
3 | 2 | 杭州
4 | 1 | 广东
============
现在用PHP从数据库中将该表全部读出成数组如下:
Array
(
[0] => Array
(
[id] => 1
[pid] => 0
[name] => 中国
)
[1] => Array
(
[id] => 2
[pid] => 1
[name] => 浙江
)
[2] => Array
(
[id] => 3
[pid] => 2
[name] => 杭州
)
[3] => Array
(
[id] => 4
[pid] => 1
[name] => 广东
)
)
现在希望写一个函数 getFullname($id) ,传入id,返回类似面包屑效果的文本。
例如:$id = 3,返回文本“中国 – 浙江 – 杭州”;$id = 4,返回文本“中国 – 广东”。
同时为了避免对数据库造成查询压力,因此不希望多次读取数据库,而是希望一次性将表中的数据都读出为数组,然后通过数组的计算组合成文本后再一次性写入数据库。
各位高手看看如何才能实现?
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);
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 下 ,
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。