从数据库中取出的数据,如
省, 市, 区
山东,济南,a区
山东,济南,m区
山东,青岛,b区
江苏,南京,a区
转化为(可看作是json):
山东:
济南:
a区
m区
青岛:
b区
江苏:
南京:
a区
请问有没有好的算法?
从数据库中取出的数据,如
省, 市, 区
山东,济南,a区
山东,济南,m区
山东,青岛,b区
江苏,南京,a区
转化为(可看作是json):
山东:
济南:
a区
m区
青岛:
b区
江苏:
南京:
a区
请问有没有好的算法?
数据库要有 id
,pid
字段,一次把有有要用的数据读出来,然后按父子关系,递归的地把它存到一个多维数组,
写了个例子,写不得好不要喷我
<?php
$city = array(
0 => array('id' => '1','pid' => '0','name' => '广西',) ,
1 => array('id' => '2','pid' => '1','name' => '南宁',) ,
2 => array('id' => '3','pid' => '1','name' => '桂林',) ,
3 => array('id' => '6','pid' => '0','name' => '广东',) ,
4 => array('id' => '7','pid' => '6','name' => '广州',) ,
5 => array('id' => '8','pid' => '6','name' => '东莞',) ,
);
function get_tree($data, $pid = 0, $parent_key_name = 'parentid', $get_all_child = true) {
$tmp = array();
foreach ($data as $key => $value) {
if ($value[$parent_key_name] == $pid) {
$tmp[$key] = $value;
unset($data[$key]);
if ($get_all_child) {
$child = get_tree($data, $value['id'], $parent_key_name, $get_all_child);
if (!empty($child)) {
$tmp[$key]['child'] = $child;
}
}
}
}
if ($get_all_child) {
$pid++;
}
return $tmp;
}
$new_city = get_tree($city, 0, 'pid', true);
var_dump($new_city);
1 回答3.1k 阅读✓ 已解决
1 回答2.6k 阅读
2.5k 阅读
1 回答1.1k 阅读
1 回答392 阅读✓ 已解决
815 阅读
1 回答324 阅读✓ 已解决
省市区依次作为第一第二第三关键字,然后检查前后对于相同的合并。