//数据不大的情况下,最好一次性查出来,在内存里递归,避免循环查表
$items = array(
1 => array('id' => 1, 'pid' => 0, 'name' => '江西省','level'=>0),
12 => array('id' => 12, 'pid' => 1, 'name' => '赣州市','level'=>1),
13 => array('id' => 13, 'pid' => 12, 'name' => '赣州','level'=>2),
14 => array('id' => 14, 'pid' => 13, 'name' => '赣县','level'=>3),
);
//将数据id提到前面作为key,可以节省if条件
$ids = array_column($items, null,'id');
function test($ids,$id,$level){
//静态数组,防止数据丢失
static $list = [];
//当前值的id和父id,判断父id为0,中止循环
if($level == 0){
return false;
}
//存储父类名字和id,自己根据业务需求来
$pid = $ids[$id]['pid'];
$list[$level]['name'] = $ids[$pid]['name'];
$list[$level]['id'] = $ids[$pid]['id'];
//调用自己,一直到level小于0停止
test($ids,$ids[$id]['pid'],--$level);
return $list;
}
//假设我们的id为14,根据上面的数组可以得到当前id的level
$id = 14;
var_dump(test($ids,$id,$ids[$id]['level']));exit;
输出结果
array(3) {
[3] =>
array(2) {
'name' =>
string(6) "赣州"
'id' =>
int(13)
}
[2] =>
array(2) {
'name' =>
string(9) "赣州市"
'id' =>
int(12)
}
[1] =>
array(2) {
'name' =>
string(9) "江西省"
'id' =>
int(1)
}
}
网友评论