#1. 数据
$data = array(
array('id' => 1,'name' => '北京',"pid" => 0),
array('id' => 2,'name' => '广东',"pid" => 0),
array('id' => 3,'name' => '海淀区',"pid" => 1),
array('id' => 4,'name' => '昌平区',"pid" => 1),
array('id' => 5,'name' => '上地',"pid" => 3),
array('id' => 6,'name' => '西二旗',"pid" => 3),
array('id' => 7,'name' => '回龙观',"pid" => 4),
array('id' => 8,'name' => '霍营',"pid" => 4),
array('id' => 9,'name' => '深圳',"pid" => 2),
array('id' => 10,'name' => '广州',"pid" => 2),
array('id' => 11,'name' => '福田',"pid" => 9),
array('id' => 12,'name' => '南山',"pid" => 9),
);
#2. 递归实现无限极(四维数组三级) code
function test($data,$pid=0){
$res=array();
foreach ($data as $v) {
if($v['pid']==$pid){
$v['child']=test($data,$v['id']);//像下面分解,返回来计算,
$res[]=$v;
}
}
return $res;
}
sult
Array
(
[0] => Array
(
[id] => 1
[name] => 北京
[pid] => 0
[child] => Array
(
[0] => Array
(
[id] => 3
[name] => 海淀区
[pid] => 1
[child] => Array
(
[0] => Array
(
[id] => 5
[name] => 上地
[pid] => 3
[child] => Array
(
)
)
[1] => Array
(
[id] => 6
[name] => 西二旗
[pid] => 3
[child] => Array
(
)
)
)
)
[1] => Array
(
[id] => 4
[name] => 昌平区
[pid] => 1
[child] => Array
(
[0] => Array
(
[id] => 7
[name] => 回龙观
[pid] => 4
[child] => Array
(
)
)
[1] => Array
(
[id] => 8
[name] => 霍营
[pid] => 4
[child] => Array
(
)
)
)
)
)
)
[1] => Array
(
[id] => 2
[name] => 广东
[pid] => 0
[child] => Array
(
[0] => Array
(
[id] => 9
[name] => 深圳
[pid] => 2
[child] => Array
(
[0] => Array
(
[id] => 11
[name] => 福田
[pid] => 9
[child] => Array
(
)
)
[1] => Array
(
[id] => 12
[name] => 南山
[pid] => 9
[child] => Array
(
)
)
)
)
[1] => Array
(
[id] => 10
[name] => 广州
[pid] => 2
[child] => Array
(
)
)
)
)
)
#2. 面包削导航(在模型中迭代实现)
Public function getParents($cat_id){
$res=array();//保存结果
while ($cat_id) {
$cat=$this->where("cat_id=$cat_id")->find();
$res[]=array(
'cat_id'=>$cat['cat_id'],
'cat_name'=>$cat['cat_name']
);
//改变条件
$cat_id=$cat['parent_id'];
}
return array_reverse($res);
}